当前位置: 首页 > 知识库问答 >
问题:

为什么在对对象调用方法时删除`this`会产生不可预知的结果?[副本]

齐英韶
2023-03-14

以下片段是从MDN修改而来的

const person = {
  name: ['Bob', 'Smith'],
  age: 32,
  gender: 'male',
  interests: ['music', 'skiing'],
  bio: function() {
    console.log(name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.');
  },
  greeting: function() {
    alert('Hi! I\'m ' + name[0] + '.');
  }
};

person.bio();
person.greeting();

请注意,我删除了name[0]之前的this。当我这样做时,Bob输出为J?WTF:|

代码里甚至没有大写的“J”?到底是怎么回事???

共有1个答案

姬熙云
2023-03-14

jsbin上,如果你做console.log(name),你会得到"JS bin输出"

http://jsbin.com/zaquvipuma/1/edit?js,控制台

 类似资料:
  • 任何人请解释为什么framework在调用detach时需要删除这个纹理对象,因为纹理是在SurfaceTexture外部创建并提供给Constructor的。因此,我希望使用纹理,即使在分离和创建者应该能够控制它的生命周期。 我们正尝试将它与附加方法和MediaCodec结合使用。在我们的用例中,我们需要复制视频帧纹理以供将来使用。 下面是创建SurfaceTexture的示例代码: 但问题是a

  • 为什么以下未有效使用的行(在方法中:getAllDefinedVars)会对最终结果产生影响: List collect=AllVars.Stream().Filter(v->false).collect(Collectors.ToList()); 如果我删除整个方法和调用此方法的一行代码(generateOneSetOfBools中的第一行),我最终会得到另一个结果。 如果... 提到的行对列表

  • 问题内容: 我有以下C ++类: 。H .CPP 我用Cython公开了以下内容: 我的问题是我不知道如何从Python调用析构函数。以下完全不执行任何操作: 我在网上找不到类似的问题。你们中有人有在这里出现过的想法吗? 我缺少有关引用计数管理的信息,或者… 非常感谢 问题答案: 删除对对象的引用(局部变量)。C ++对象中还有另一个参考。这称为参考周期。循环GC 可能会 在一段时间后收集此信息。

  • 通常创建对象来表示真实世界中的实体,如用户和订单等: let user = { name: "John", age: 30 }; 并且,在现实世界中,用户可以进行 操作:从购物车中挑选某物、登录和注销等。 在 JavaScript 中,行为(action)由属性中的函数来表示。 方法示例 刚开始,我们来教 user 说 hello: let user = { name: "John",

  • 我是大学里的一个新手Java程序员。今天我发现了一些东西,打破了我关于Java语法如何工作的一个概念。 在ArrayList类中找不到方法stream(),但它可能看起来好像在那里。当我将鼠标移到Eclipse中的-方法上时,它表示这是集合的一部分,但我在其在线文档中的任何地方都找不到方法。 如果方法不是我调用它的类的一部分,为什么它可以调用它?

  • 我在Python2.7上使用Flask,我想将一个值作为一个json值返回, 但是我得到了以下错误, 127.0.0.1--[03/Oct/2016 15:04:16]“POST/add_new_patient HTTP/1.1”500-127.0.0.1--[03/Oct/2016 15:04:30]“options/add_new_patient HTTP/1.1”200-[2016-10-0