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了