var name = 'Mike';
var person = {
name: 'John',
welcome: function(){
var name = 'Mary';
return 'Hi ' + this.name;
}
}
//person.welcome();
// output is
// Hi John
// I was expecting output to be
// Hi Mary
person.welcome.call();
// output is
// Hi Mike
// In this case since no argument is passed to call so this is window and
// I get that window.name is Mike
答案 0 :(得分:4)
var name = 'Mike';
var person = {
name: 'John',
welcome: function(){
var name = 'Mary';
return 'Hi ' + this.name;
}
}
this.name
引用对象属性“name”
name
指的是变量“name”
您将获得return 'Hi ' + name;
答案 1 :(得分:0)
为什么你在第一种情况下期待Hi Mary
?
var name = 'Mary';
不覆盖this.name
,而是在函数中创建名为name
的局部变量。
在第二种情况下,您使用的是call
,其中包含this
个参数,并且:
确定此内部的值 乐趣。如果thisArg为null或未定义, 这将是全球对象。
答案 2 :(得分:0)
如果您正在等待输出为Hi Mary
,那么您不需要在welcome函数中使用它。这应该这样做:
var name = 'Mike';
var person = {
name: 'John',
welcome: function(){
var name = 'Mary';
return 'Hi ' + name;
}
}
当person.welcome()
this
关键字引用person
welcome
时,this.name
函数person.name
上的{{1}}将成为约翰{{1}}。
答案 3 :(得分:0)
this
始终引用您正在调用该函数的对象。在大多数简单的情况下,这将是.
前面的任何内容。例如,在person.welcome()
的情况下,现在指的是人。如果您致电person.welcome.call()
,则会引用该窗口,因为您没有将任何内容指定为call()
的参数。