在我的 Web 应用程序中,我有一个自定义对象,我使用对象函数构造函数定义了该对象,并通过构造函数原型应用了各种共享属性。
MyObject = function (Name) {
this.Name = Name;
this.ListItem1 = document.createElement('li');
this.ListItem1.onclick = this.SetActive;
this.ListItem2 = document.createElement('li');
this.ListItem2.onclick = this.SetActive;
}
MyObject.prototype.SetActive = function () {
alert('SetActive: ' + this.Name);
}
现在这是一个简化的示例,我的实际对象附加了更多的 DOM 元素,并且每个 DOM 元素都有许多不同的事件侦听器。我的对象也有许多其他属性和方法。我还可能拥有该对象的数千个实例,因此代码效率很重要。
我现在的问题是,当触发 DOM 事件时,事件处理程序的“this”属性设置为实际的 DOM 元素,而不是我的对象实例。
例如:
var HelloObj = new MyObject('Hello');
HelloObj.SetActive();
//This alerts 'SetActive: Hello'
HelloObj.ListItem1.click();
//This alerts 'SetActive: undefined' because 'this' in SetActive
//becomes ListItem1 and obviously ListItem1.Name is undefined
那么如何将DOM元素的事件处理程序设置为函数指针(不是每个事件处理程序的新函数实例,当有大量对象实例时效率低下)但仍然保留对象实例本身的上下文'这'?