“违约”;这";javascript中的绑定

“违约”;这";javascript中的绑定,javascript,Javascript,我正在读一本书,书上说函数中的这个是以4种不同的方式设置的。默认、隐式、显式绑定+使用new语法。在所有情况下,此在函数调用时设置。请看一个例子 当我调用jajca()时,我希望通过默认绑定设置这个。。这就是调用jajca()时的情况。该已设置为使用new语法创建的对象。但由于某些原因,我不明白,this在jajca中指向窗口,即使通过默认绑定,this应该指向使用new创建的对象 function jajca() { this.musicFolderPath = "value2"; //

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

当我调用
jajca()
时,我希望通过默认绑定设置
这个
。。这就是调用
jajca()
时的情况。该
已设置为使用
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
你能解释一下为什么
这个
没有像我预期的那样设置吗?如果使用显式绑定,则
按预期指向使用
new
关键字创建的对象

当我调用jajca()时,我希望这是通过默认绑定设置的。。这就是调用jajca()的时候,它已经设置为使用新语法创建的对象。但由于某些原因,我不明白,jajca内部的这个指向窗口,即使通过默认绑定,它应该指向使用new创建的对象

这个想法的要点是,每当你调用另一个函数时,
this
所代表的对象将被“重置”。(-根据“this”含义的各种规则——这就是你的书所涉及的内容。例如,当你做
obj.bar()
时,
bar
this
的值将是
obj
。这就是为什么当你做
this.baz()时,“this”值保持不变的原因。)
:它只是说,让
baz
中的
this
等于当前的
this
值。)

这是一个相当深入的话题,你的书可能比我在简短的回答中写得更详细,但如果你在学习时牢记这一点,你就会更容易理解事情


在这种情况下,是的,您希望执行
jajca。调用(this)
以使
this
内部
jajca
的值成为您希望的值。

这两个
this
的可能副本完全不相关:一个在普通函数中,一个在构造函数中,另一个在构造函数中调用。您从未在
jajca
上使用过
new
。你在说什么
这个
将是用来调用函数的最右边点左边的任何值。在您的例子中,没有点,因此它是
窗口
。如果将其作为一个方法,
Music.prototype.jajca
,并将其称为
Music.jajca()
,则实例将位于最后一个点的左侧,它将是一个方法,而不是一个独立函数<代码>调用
应用
绑定
当然要超越这一点。