我有这个脚本:
Bla = function() {
this.prop = 123;
}
Bla.prototype.yay = function() {
console.log(this,this.prop);
}
X = new Bla();
$(document).ready(X.yay); // output: #document undefined --> why?
$(document).ready(function(){
X.yay(); // output: Bla 123 --> desired result
});
如何正确调用第一个(this
应该引用X)而不延伸Object
?
答案 0 :(得分:1)
简短的回答,无论函数在何处调用,this
都指对象,它是属性,或者全局对象不是对象的属性。
当你将方法传递给一个函数时,该函数不再是一个对象的方法,而是一个函数的局部变量,在这种情况下,无论如何,this
指的是{{1} object,因为这是调用document ready事件的对象。
在现代JavaScript实现中,您可以bind
对象的方法。
示例:强>
document
请注意,这需要IE9或更高版本。您使用的匿名函数也是可接受的解决方案,并且可以在旧版本的IE中使用。
答案 1 :(得分:1)
您可以使用bind
:
$(document).ready(X.yay.bind(X));
这会在函数周围创建一个“包装器”,在调用它时将this
设置为X
。