就拿这个类:
var MyClass = new Class({
Implements: [Events, Options],
initialize: function() {
this.a = 1;
},
myMethod: function() {
var mc = new differentClass({
events: {
onClick: function() {
console.log(this.a); // undefined (should be 1, 2, 3 etc)
this.a ++;
}
}
});
}
});
如何保持this.a价值? 我基本上是想借鉴的最后一个点到坐标刚按下一条线(使用Canvas)。
[编辑]
我不想绑定this
,因为它是坏显然,它会过度乘坐differentClass
选项。
几种模式可供选择。
经由装饰.bind()
var mc = new differentClass({
events: {
click: function() {
console.log(this.a);
this.a ++;
}.bind(this) // binds the scope of the function to the upper scope (myclass)
}
});
保持一个参考。
var self = this; // reference parent instance of myClass
var mc = new differentClass({
events: {
click: function() {
console.log(self.a);
self.a ++;
}
}
});
指向可以对付它一个myClass的方法:
handleClick: function() {
this.a++;
},
myMethod: function() {
var mc = new differentClass({
events: {
click: this.handleClick.bind(this)
}
});
}
2-ND一个-通过存储参考优选由于较小的足迹和普遍的支持而.bind
不可用在每一个浏览器,需要进行匀场以及额外的时间来咖喱上执行的功能。
self
是你将在MooTools的核心本身查找可能的情况下。
如果性能是没有风险,方法3大概可以提供最好的可读性和代码结构。 该参数的方法将保持单击处理程序传递的内容,即event
和event.target
将处理程序。
在模式#2与self
, this
将指向点击处理匿名函数内(或到另一个类,例如),这可能是有用的,以及-重新绑定上下文可以在颈部疼痛
你可以参考这样的适当的范围内:
...
myMethod: function() {
var _this = this;
var mc = new differentClass({
events: {
onClick: function() {
console.log(_this.a);
_this.a ++;
}
}
});
}
...