var A = function(x){
var that = this;
this.a = x;
}
A.prototype = {
init: function(){
alert(this.a); // as that is not found :s
}
};
var a = new A(1);
var b = new A(2)
a.init.call(b);
// I want to alert number 1, how to do it?
我需要这个,因为我使用jQuery事件。
我的问题得到了解答,但这有一些问题,我必须定义一个本地的var并为每个事件创建一个闭包......生病了!
var that = this;
this.view.skinAppliedSignal.add(function(){
that.onSkinApplied();
});
//然后在onSkinApplied中这是正确的。什么方式不那么hacky完成这个?
答案 0 :(得分:2)
一般来说,你不能这样做。函数运行时唯一存在的this
是调用建立的this
。
当你建立事件处理程序时,你可以在一个闭包中“陷阱”:
function something() {
$('.whatever').each(function() {
var whatever = $(this);
whatever.find('button').click(function() {
whatever.hide();
});
});
}
在该示例中,“whatever”用于从“each”循环中保存元素,以便连接到按钮元素的事件处理程序可以访问它。
编辑 - 基于评论和对问题的更新,很明显可能需要的是像“.bind()”这样的功能,它是ES5的一部分(由提供者提供)一些库,如Prototype,Functional和jQuery)。通过使用“bind”,您基本上可以在另一个函数中包含您选择的任何函数,这样您的函数将始终在this
设置为某个特定对象的情况下调用。
答案 1 :(得分:1)
无法使用原型。你可以这样做,但是:
var A = function(x){
var that = this;
this.a = x;
this.init = function(){
alert(that.a);
}
}
var a = new A(1);
var b = new A(2)
a.init.call(b);