类方法无法访问属性

Ami*_*mir 5 javascript class dom-events

我创建了一个像这样的类:

function MyClass()
{
    var myInt = 1;
}

MyClass.prototype.EventHandler = function(e)
{
    alert(this.myInt);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这this是触发的事件(在我的例子中是一个<a>标签),我无法访问类属性。

有什么建议么?

Vin*_*ert 5

这取决于您在注册事件时如何提供事件处理程序。

下面的代码

element.addEventListener("click", myObject.EventHandler);
Run Code Online (Sandbox Code Playgroud)

不会做你想做的事。

Javascript 不像 C# 那样处理委托,因此 myObject.EventHandler 不是为 myObject 调用的 EventHandler 方法。

如果您想调用对象上的方法作为事件处理程序,最好的方法是将其包装到函数中。

element.addEventListener("click", function(event)
{
    myObject.EventHandler(event);
});
Run Code Online (Sandbox Code Playgroud)


CMS*_*CMS 5

构造函数中声明的“vars”在其他公共函数中不可用,它们被视为“私有成员”。

您可以使用this.myInt = 1该成员将其公开,并可供所有类方法使用:

function MyClass(){
    this.myInt = 1;  // Public member
}

MyClass.prototype.EventHandler = function(e){
    alert(this.myInt);
}
Run Code Online (Sandbox Code Playgroud)

或者你可以有一个“特权”方法,来访问构造函数范围内的“私有”成员:

function MyClass(){
    var myInt = 1; // Private member

    this.getMyInt = function(){  // Public getter
        return myInt;
    }
}

MyClass.prototype.EventHandler = function(e){
    alert(this.getMyInt());
}
Run Code Online (Sandbox Code Playgroud)

推荐讲座:JavaScript 中的 Private Members (Douglas Crockford)