一个例子:
var MyClass = (function () {
function MyClass() {
// construct
}
MyClass.prototype.clickEvent = function() {
this.doSomething();
};
MyClass.prototype.doSomething = function() {
// do something here
};
return MyClass;
})();
var mc = new MyClass();
$('my-ele').click(mc.clickEvent.bind(mc));
我需要将mc绑定到mc.clickEvent才能使其正常工作。还有另一种方法吗?它运行正常,如果有一种方法可以定义clickEvent()函数的范围而不需要在设置click事件函数时附加.bind(mc),那就太好了。
我看到这样的事情:
MyClass.prototype.clickEvent = function() {
this.doSomething();
}.bind(this);
但这没效果。
答案 0 :(得分:0)
如果您直接使用mc.clickEvent
,它会按预期工作。 click
实际上正在改变绑定,并且明确地调用bind
,就像你不是在告诉它一样。
您也可以从一开始就模仿它。 (这就是Moogs answer所做的。
可能接近的一种更简单的方法是将呼叫包裹起来:
$('my-ele').click(function(i,e) { mc.clickEvent(i,e); })
clickEvent
this
内的这种方式仍为mc
。
答案 1 :(得分:0)
您的上一个代码段不起作用,因为您在调用bind
方法之前没有包装该函数,如下所示:
function MyClass() {
this.clickEvent = (function() {
this.doSomething();
}).bind(this);
}
然而,这是效率低下的因为它需要在不利用原型链的构造函数内定义函数。我觉得这有助于解释为什么你的最后一段代码没有用。