构造函数中的执行上下文

时间:2019-10-05 15:25:20

标签: javascript

我试图将自己的想法围绕js中的执行上下文。我遇到一种我不完全了解的行为。 我有一个像这样的构造函数:

function Person(name, age, helloFunction){
    this.name = name;
    this.age = age;
    this.hello = helloFunction;
    this.executeHello = function(){
        helloFunction();
    }
}

我在全局上下文中添加了变量 name

this.name = "GLOBAL NAME";

然后添加的功能:

function hello(){
    console.log(this.name);
}

稍后,我使用提供的构造函数创建person对象:

const jack = new Person("Jack", 20, hello);

然后致电:

jack.hello(); //prints "Jack" because we're in jack context - that's why this points to jack and this.name = "Jack"

但是

jack.executeHello(); //prints GLOBAL NAME - value from global context, not from jack context

我的问题是-为什么执行上下文会改变第二种方法?为什么执行上下文指向全局变量,而不是指向Jack,即使在jack上调用了方法? 在这两种情况下,构造函数中的helloFunction都保留对为global定义的同一对象的引用。

0 个答案:

没有答案