假设我有一个非常简单的PrototypeJS类,如下所示:
var Foo = Class.create({
initialize: function() {
this.bar = 'bar';
},
dostuff: function() {
$$('.enabled').each( function(elem) {
alert(this.bar); //FAIL
});
}
});
这会失败,因为传递给 .each()的函数不知道这个所指的是什么。
如何从该函数中访问Class的 bar 属性?
答案 0 :(得分:2)
尝试:
dostuff: function() {
var that = this;
$$('.enabled').each( function(elem) {
alert(that.bar); //FTW
});
}
或者,将上下文传递给each()
:
dostuff: function() {
$$('.enabled').each( function(elem) {
alert(this.bar); //FTW
}, this); // Context
}
答案 1 :(得分:1)
你可以使用Prototype's bind function,它将'[函数]的执行范围锁定到一个对象'。
var Foo = Class.create({
initialize: function() {
this.bar = 'bar';
},
dostuff: function() {
$$('.enabled').each( function(elem) {
alert(this.bar);
}.bind(this)); // Set the execution scope to Foo
}
});
答案 2 :(得分:0)
嗯,我不是原型专家,但是我想这可能有助于回答你的问题 - http://www.duncangunn.me.uk/dasblog/2009/05/26/ObjectorientedEventHandlingInJavascript.aspx
如果有的话,请告诉我,如果没有,请为浪费时间而道歉!
答案 3 :(得分:0)
当你在每个()中时,这个指的是每个都在迭代的内容。如果该类只有一个实例,则将所有这些替换为Foo。
var Foo = Class.create({
bar : "bar",
dostuff: function() {
$$('.enabled').each( function(elem) {
alert(Foo.bar); //FAIL
});
}
});
如果你无法逃脱警报(吧);