“违约”;这";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()
,则实例将位于最后一个点的左侧,它将是一个方法,而不是一个独立函数<代码>调用
和应用
和绑定
当然要超越这一点。