JavaScript基础知识的简单“这个”问题

时间:2010-03-03 04:10:51

标签: javascript

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

4 个答案:

答案 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或未定义,   这将是全球对象。

From here

答案 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()的参数。