Javascript 类方法可以';t访问属性

Javascript 类方法可以';t访问属性,javascript,class,dom-events,Javascript,Class,Dom Events,我创建了这样一个类: function MyClass() { var myInt = 1; } MyClass.prototype.EventHandler = function(e) { alert(this.myInt); } 不幸的是,this是触发的事件(在我的例子中是标记),我无法访问类属性 有什么建议吗?这取决于注册事件时如何提供事件处理程序 下面的代码 element.addEventListener("click", myObject.EventHandle

我创建了这样一个类:

function MyClass()
{
    var myInt = 1;
}

MyClass.prototype.EventHandler = function(e)
{
    alert(this.myInt);
}
不幸的是,
this
是触发的事件(在我的例子中是
标记),我无法访问类属性


有什么建议吗?

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

下面的代码

element.addEventListener("click", myObject.EventHandler);
不会做你想做的事

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

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

element.addEventListener("click", function(event)
{
    myObject.EventHandler(event);
});

JavaScript实际上没有类
MyClass
是对象的构造函数,其原型是对象
MyClass.prototype

这个
关键字可能让人难以理解;它在函数中的值取决于该函数作为属性调用的对象

如果您希望能够从事件处理程序调用对象的方法,那么应该使用Vincent Robert建议的函数闭包

我建议您查看这些链接以了解有关此的更多信息:

此外,

function MyClass()
{
    var myInt = 1;
}
此构造函数在函数内设置一个局部变量,该变量不能从函数外部访问。如果要初始化对象的属性,需要使用
this.myInt=1
。但是,此值将仅在由
new MyClass()
构造的对象上设置,而不会在MyClass函数对象本身上设置。

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

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

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

MyClass.prototype.EventHandler = function(e){
    alert(this.myInt);
}
或者您可以使用“特权”方法来访问构造函数作用域上的“私有”成员:

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

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

MyClass.prototype.EventHandler = function(e){
    alert(this.getMyInt());
}

推荐讲座:(Douglas Crockford)

假设您将
var myInt
替换为
this.myInt
,您可以从
MyClass.prototype.EventHandler
中引用它作为
MyClass.myInt
,而不必担心
这个
指的是什么。

但是调用EventHandler函数时,“this”对象不会引用标记吗?谢谢您的回答,尽管我不得不对其进行一些调整:附加事件是在类(myObject)的作用域内进行的,因此myObject.EventHandler是未知的。相反,在将事件附加到元素之前,我添加了一个带有“this”(element.myObj=this)的属性;现在我可以访问obj了