javascript

时间:2018-12-20 20:41:05

标签: javascript

我正在读一本书,它说函数内的this用4种不同的方式设置。使用new语法的默认,隐式,显式绑定+。在所有情况下,在函数调用时都设置this。看一个例子。

当我调用jajca()时,我期望通过默认绑定设置this。也就是说,当调用jajca()this已被设置为是使用new语法创建的。但是由于某种原因,我不理解,尽管通过默认绑定,this内的jajca指向窗口,this应该指向使用new创建的对象。

function jajca() {
   this.musicFolderPath = "value2"; // never gets assigned to the correct this.musicFolderPath
}

function Music(){
  this.musicFolderPath;
  jajca(); // music.musicFolderPath is undefined
  // jajca.call(this); music.musicFolderPath is correctly set
}

    var music = new Music();
    //music.musicFolderPath is undefined

您能解释为什么未设置this的原因吗?如果使用显式绑定,则this会按预期指向使用new关键字创建的对象。

1 个答案:

答案 0 :(得分:-2)

  

当我调用jajca()时,我希望可以通过默认绑定进行设置。这就是调用jajca()时已将其设置为使用新语法创建的对象。但是出于某种我不理解的原因,即使通过默认绑定,jajca中的这个指针仍指向窗口,这应该指向使用new创建的对象。

这个主旨是,无论何时调用另一个函数,this表示的对象都会被“重置”。 (-根据“这”的含义的各种规则-这就是您的书所涉及的。例如,当您执行obj.bar()时,thisbar的值将就是obj。这就是为什么在执行this.baz()时,“ this”值“保持不变”的原因:this中的baz等于当前值this值。)

这是一个非常深入的话题,您的书可能比我在StackOverflow简短回答中写得更详细,但是如果您在学习时牢记这一点,您会更容易理解。

>

在这种情况下,是的,您想要做jajca.call(this)来使this中的jajca的值成为您想要的值。