我试图将自己的想法围绕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定义的同一对象的引用。