我创建了一个类似的类:
function MyClass()
{
var myInt = 1;
}
MyClass.prototype.EventHandler = function(e)
{
alert(this.myInt);
}
不幸的是,this
是触发事件(在我的casss标签中),我无法访问类属性。
有什么建议吗?
答案 0 :(得分:4)
这取决于您在注册活动时如何提供事件处理程序。
以下代码
element.addEventListener("click", myObject.EventHandler);
不会做你想做的事。
Javascript不会像C#那样处理委托,所以myObject.EventHandler不是为myObject调用的EventHandler方法。
如果要将对象上的方法作为事件处理程序调用,最好将其包装到函数中。
element.addEventListener("click", function(event)
{
myObject.EventHandler(event);
});
答案 1 :(得分:4)
构造函数中声明的“vars”在其他公共函数中不可用,它们被视为“私有成员”。
您可以使用this.myInt = 1
将该成员公开,并且可用于所有类方法:
function MyClass(){
this.myInt = 1; // Public member
}
MyClass.prototype.EventHandler = function(e){
alert(this.myInt);
}
或者您可以使用“特权”方法来访问构造函数范围内的“ private ”成员:
function MyClass(){
var myInt = 1; // Private member
this.getMyInt = function(){ // Public getter
return myInt;
}
}
MyClass.prototype.EventHandler = function(e){
alert(this.getMyInt());
}
推荐讲座:Private Members in JavaScript(Douglas Crockford)
答案 2 :(得分:2)
JavaScript实际上没有类。 MyClass
是对象的构造函数,其原型是对象MyClass.prototype
。
this
关键字可能会让人难以理解;它在函数中的值取决于函数被称为函数的对象。
如果你想能够从事件处理程序中调用对象的方法,你应该使用像Vincent Robert建议的函数闭包。
我建议您查看这些链接,了解有关this
的更多信息:
此外,
function MyClass()
{
var myInt = 1;
}
此构造函数在函数内设置一个局部变量,该变量无法从函数外部访问。如果要初始化对象的属性,则需要使用this.myInt = 1
。该值仅在new MyClass()
构造的对象上设置,而不是在MyClass函数对象本身上设置。
答案 3 :(得分:0)
假设您将var myInt
替换为this.myInt
,您可以在MyClass.myInt
内将其引用为MyClass.prototype.EventHandler
,而无需担心this
引用的内容。