我遇到使用原型observe
函数并获得对此指针的访问权限的问题。请考虑以下事项:
var Demo = Class.create({
this.someValue = "this is the value",
initialize: function() {
Event.observe("button1", "click", function() {
alert(this.someValue);
});
Event.observe("button2", "click", this.testFunc());
},
testFunc: function() {
alert(this.someValue);
}
});
单击button1
和button2
控件并不执行我想要的警报显示“这是值”,而是显示事件的来源(即, 按钮)。所以我的问题是我如何能够实现我所追求的并使该指针等于Demo
类。
答案 0 :(得分:2)
在this
引用所需对象的范围内,将其分配给变量(例如self
),然后引用不再this
的范围中的变量指期望的对象。例如:
/**
* @constructor
*/
var Demo = function(){};
/**
* Some value
* @type {string}
*/
Demo.prototype.someValue = "this is the value";
/**
* Initializes the demo.
*/
Demo.prototype.initialize = function() {
var self = this;
Event.observe("button1", "click", function() {
alert(self.someValue);
});
Event.observe("button2", "click", self.testFunc());
};
/**
* Prints the value
*/
Demo.prototype.testFunc = function() {
alert(this.someValue);
};
答案 1 :(得分:2)
来自manual:
原型的绑定功能来拯救。使用bind(),您可以确保您的方法获得正确的
this
。
在你的例子中:
var Demo = Class.create({
initialize: function() {
this.someValue = "this is the value";
Event.observe("button1", "click", (function() {
alert(this.someValue);
}).bind(this));
Event.observe("button2", "click", this.testFunc.bind(this));
},
testFunc: function() {
alert(this.someValue);
}
});