javascript——为什么是';这';不引用对象?代码如下

javascript——为什么是';这';不引用对象?代码如下,javascript,scope,Javascript,Scope,我不明白为什么this.name与obj.name不一样,基本上为什么在这种情况下这个指的是窗口对象,而不是obj对象。在下面的代码中,this.name在obj.name之后实例化 function createNewPerson(name) { var obj = {}; obj.name = name; alert(this.name); return obj; } Per: 在函数内部,其值取决于函数的运行方式 打电话。由于以下代码未处于严格模式,并且

我不明白为什么
this.name
obj.name
不一样,基本上为什么在这种情况下
这个
指的是
窗口
对象,而不是
obj
对象。在下面的代码中,
this.name
obj.name
之后实例化

function createNewPerson(name) {
    var obj = {};
    obj.name = name;
    alert(this.name);
    return obj;
}
Per:

在函数内部,其值取决于函数的运行方式 打电话。由于以下代码未处于严格模式,并且 此值不是由调用设置的,这将默认为 全局对象,它是浏览器中的窗口

因此,在本例中,您将
this
作为窗口对象,而不是
obj
。您可以通过手动绑定来获取函数中的
obj
上下文,例如:

function createNewPerson(name) {
  console.log(this.name); // Hello
  console.log(name); // World
}

var obj = {};
obj.name = 'Hello';
var salva = createNewPerson.apply(obj, ['World']); 
但正如我所理解的,您真正需要的是一个函数构造器,并通过
new
操作符实例化一个对象:

function createNewPerson(name) {
  this.name = name;
}
var salva = new createNewPerson('Salva');
console.log(salva.name); // Salva

你认为为什么会这样
obj
只是一个对象(即使这是作为实例上的方法调用的,
this
仍然不会引用
obj
)。你应该仔细阅读这个关键词,以获得基本的理解。见: