![](/img/trans.png)
[英]Question regarding “this” inside anonymous function of prototype.js .each method
[英]Access an instance variable inside an anonymous function inside prototype method
这实际上是我上一个问题的后续问题, Access instance variable inside a function in javascript? .
我想在原型方法中访问匿名 function 中的实例变量。
function MyObject(){
//Instance variables
this.handler;
}
//Methods
MyObject.prototype.enableHandler = function(){
var button = document.getElementById('button');
button.onclick = function(){
this.handler();//Is not working
}
}
var myObject = new MyObject();
myObject.handler = function(){
alert('Hello World!');
}
myObject.enableHandler();
JSFiddle http://jsfiddle.net/3cmvZ/
上面的示例只是为了阐明如何在原型方法中访问匿名 function 中的实例变量。 我已经知道button.onclick = this.handler
有效。
问题不在于匿名 function 在原型中,而在于它是一个事件处理程序(不作为方法调用)。
问题是在您的 onclick 处理程序中, this
关键字绑定到windows
object,而不是设置原型的myObject
实例。 您可以将 object 存储在that
变量中并创建一个闭包:
function MyObject(){
//Instance variables
this.handler;
}
//Methods
MyObject.prototype.enableHandler = function(){
var button = document.getElementById('button');
var that = this;
button.onclick = function(){
that.handler();//Should be working
}
}
var myObject = new MyObject();
myObject.handler = function(){
alert('Hello World!');
}
myObject.enableHandler();
this.handler
不在同一个 scope 中。 您需要将其声明为:
MyObject.prototype.enableHandler = function() {
var button = document.getElementById("button");
button.onclick = this.handler;
}
由于您只是直接调用事件,因此无需将其包装在另一个 function 中。
根据您的评论更新:
MyObject.prototype.enableHandler = function() {
var button = document.getElementById("button");
var $this = this;
button.onclick = function() {
$this.handler();
}
}
您需要创建一个与匿名 function 位于同一 scope 中的局部变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.