Javascript这个关键字引用另一个对象

时间:2014-12-10 04:28:42

标签: javascript this

我有这个脚本:

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

2 个答案:

答案 0 :(得分:1)

简短的回答,无论函数在何处调用,this都指对象,它是属性,或者全局对象不是对象的属性。

当你将方法传递给一个函数时,该函数不再是一个对象的方法,而是一个函数的局部变量,在这种情况下,无论如何,this指的是{{1} object,因为这是调用document ready事件的对象。

在现代JavaScript实现中,您可以bind对象的方法。

示例:

document

请注意,这需要IE9或更高版本。您使用的匿名函数也是可接受的解决方案,并且可以在旧版本的IE中使用。

答案 1 :(得分:1)

您可以使用bind

$(document).ready(X.yay.bind(X));

这会在函数周围创建一个“包装器”,在调用它时将this设置为X