1
我想做一个简单的事件处理程序。为什么我的简单事件处理示例不起作用?
(注意,我并不想实现一个全面的发布/订阅模式,我在为什么,因为我认为它应该我的例子不工作只是感兴趣)
var myObj = (function() {
var private = "X";
function triggerEvent(eventName) {
if (this[eventName]) {
this[eventName]();
}
}
// Setter/Getter
function getProp() {
return private;
}
function setProp(value) {
private = value;
triggerEvent("onPropChange");
}
// Public API
return {
// Events
"onPropChange": null, // Fires when prop value is changed
// Methods
"getProp": getProp,
"setProp": setProp
};
})();
// Now set event handler
myObj.onPropChange = function() {
alert("You changed the property!");
};
myObj.setProp("Z"); // --> Nothing happens. Wrong
// Why doesn't my alert show?
我将我的对象的onPropChange
属性设置为更简单的处理函数,但不会被解雇。我调试了这个,看起来在triggerEvent
变量this
正在引用全局window
对象。我认为它应该参考myObj
(这是我需要的)。
有人可以解释我的想法中的错误,以及我如何纠正这个错误?非常感谢。所以在创建OBJ
我已经试过这个了 - 它不起作用。 http://jsfiddle.net/dkqUW/1/也许我是误解。如果你认为它有效,你可以更新我的jsFiddle并添加链接吗? – njr101
我编辑了我的答案,它是错误的:D –
谢谢。这现在起作用。但你能解释为什么我的原稿不起作用吗?我在JS中理解“this”时必须有一个错误。你的解决方案是解决这个问题的“正常”方法吗?我发现它使得代码结构的可读性降低,因为对象需要在代码的一半处进行定义(或者依靠变量提升) – njr101