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>标签),我无法访问类属性。
有什么建议么?
这取决于您在注册事件时如何提供事件处理程序。
下面的代码
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)
构造函数中声明的“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)