javascript - 在原型(prototype)方法中的匿名函数中访问实例变量

标签 javascript oop

这实际上是我之前问题 Access instance variable inside a function in javascript? 的后续问题.

我想在原型(prototype)方法中访问匿名函数中的实例变量。

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/

上面的例子只是为了阐明我如何在原型(prototype)方法中的匿名函数中访问实例变量。我已经知道 button.onclick = this.handler 有效。

最佳答案

问题不在于匿名函数在原型(prototype)中,而在于它是一个事件处理程序(不作为方法调用)。

问题是在您的 onclick 处理程序中,this 关键字绑定(bind)到 windows 对象,而不是 myObject 实例原型(prototype)被设置。您可以将对象存储在 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();

关于javascript - 在原型(prototype)方法中的匿名函数中访问实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6573972/

相关文章:

ruby 元 : Class. superclass.class == 类

oop - 如何打破我的程序编码习惯?

javascript - 简单的 Google 脚本不起作用

javascript - 如何仅使用 Datepicker Jquery 启用月份的最后几天?

javascript - Javascript 中的 JSON 对象排序

c++ - 在C++中将不同的类按层次结构放在一个容器中

python - Python 类中的变量作用域

oop - setter 和状态模式中的逻辑

javascript - 在我的 HTML 页面中输出 `\xA0` 或 `\xC2A0` 是否可以,还是我需要将其转义为 ` ` ?

javascript - 如何在重新加载另一个数据集 ui-grid 之前删除 ui-grid 上的排序