'this'关键字如何运作?

use*_*337 1 javascript

我无法理解正在bob.setAge = setAge做什么.有人可以解释它是如何工作的吗?

var bob = {
    name: "Bob Smith",
    age: 15
};

var frank = {
    name: "Frank Wolf",
    age: 32
};

function setAge(newAge) {
    this.age = newAge;
}

bob.setAge = setAge;
bob.setAge(23);
Run Code Online (Sandbox Code Playgroud)

the*_*eye 6

this将在调用函数期间确定值.所以,当你用bob这样的方式调用它时

bob.setAge(23);
Run Code Online (Sandbox Code Playgroud)

在里面setAge,this会参考bob.因此,23将被分配到bobage属性.

您可以将该函数动态附加到任何对象并调用setAge.例如,

frank.setAge = setAge;
frank.setAge(26);
Run Code Online (Sandbox Code Playgroud)

将设置agefrank26.

注意:如果您只是调用setAge没有任何对象的函数,就像这样

setAge(10);
Run Code Online (Sandbox Code Playgroud)

然后JavaScript将确保this将引用全局对象.但是,如果你在脚本模式下执行此操作,this将被设置为undefinedsetAge会失败.因为,你不能设置ageundefined.

  • Downvoter,请让我知道这个答案有什么问题. (2认同)