Javascript 为什么在对对象调用方法时删除`this`会产生不可预知的结果?
以下截取的内容是从 请注意,我已从Javascript 为什么在对对象调用方法时删除`this`会产生不可预知的结果?,javascript,javascript-objects,Javascript,Javascript Objects,以下截取的内容是从 请注意,我已从名称[0]之前删除了此。当我这样做时,Bob被输出为J?WTF?:| 代码里连大写字母“J”都没有?发生了什么事?在jsbin上,如果您执行控制台.log(名称),您将获得“jsbin输出”名称[0]因此是“J” name是全局变量。就这些。所以您正在访问第页的某个地方设置的变量。。尝试console.log(年龄)。您将得到未定义。如果没有此,名称将引用全局范围。打印出window.name,您将看到J的来源。在链接的代码段中,window.name的值是JS
名称[0]
之前删除了此
。当我这样做时,Bob
被输出为J
?WTF?:|
代码里连大写字母“J”都没有?发生了什么事?在jsbin上,如果您执行
控制台.log(名称)
,您将获得“jsbin输出”
<代码>名称[0]因此是“J”
name是全局变量。就这些。所以您正在访问第页的某个地方设置的变量。。尝试console.log(年龄)。您将得到未定义。如果没有
此
,名称
将引用全局范围。打印出window.name
,您将看到J
的来源。在链接的代码段中,window.name
的值是JS Bin Output
(注意第0个字符是J
)。@bigless是正确的name[0]
在本例中是访问window.name[0]
这是字符串`“JS Bin…”@CodeFinity,但您会在任何页面上发现类似的行为。窗口
的所有属性都可以在浏览器中作为全局变量访问()。所以还有很多其他的例子,比如length
或者location
@biglessconsole.log(age)
应该抛出一个引用错误,而不是输出undefined
,除非有一个名为age
的全局(或任何其他可访问的作用域)的值undefined
。这并不能解释为什么会有差异(例如属性引用与标识符解析)。是的,这一切都是JSBin奇怪的结果。是的,这几乎消除了我对JSBin的困惑。事实上,我没有在普通的VS代码中尝试它——只有在那里,否则我可能会发现它。
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();