对象变量中更改的javascript事件侦听器
我有一个对象变量,它有几个属性对象变量中更改的javascript事件侦听器,javascript,jquery,Javascript,Jquery,我有一个对象变量,它有几个属性 MyVar = {"prop1" : 0, "prop2": 0....}; 如何编写一个事件侦听器来侦听任何属性中的更改 MyVar = {"prop1" : 0, "prop2": 0....}; 感谢您的建议。对于ES5,您有设置器: var MyVar = { _prop1: 0, get prop1() { return this._prop1; }, set prop1(value) { this._prop1 = value; /*L
MyVar = {"prop1" : 0, "prop2": 0....};
如何编写一个事件侦听器来侦听任何属性中的更改
MyVar = {"prop1" : 0, "prop2": 0....};
感谢您的建议。对于ES5,您有设置器:
var MyVar = {
_prop1: 0,
get prop1() { return this._prop1; },
set prop1(value) { this._prop1 = value; /*Listener code can go here*/ }
};
我知道这是一个老问题,但如果您这样做是为了调试脚本,您可以使用浏览器中的
调试工具添加侦听器,方法与调试脚本相同
就我个人而言,我正在Firefox中使用Firebug
,一旦打开,进入DOM选项卡,搜索变量,然后(类似于向脚本添加断点)添加断点。它将中断并滚动到要处理变量更改的特定代码行
查看->Firefox或Google Chrome如果您想在对象变量更改时触发事件,可以为该obj设置一个小的观察者模式
var MyVar = {
prop1: "Foo",
prop2: "Bar",
events: {},
setProp1: function(prop1) {
this.prop1 = prop1;
this.notify('prop1', this.prop1);
},
setProp2: function(prop2) {
this.prop2 = prop2;
this.notify('prop2', this.prop1);
},
addEvent: function(name) {
if (typeof this.events[name] === "undefined") {
this.events[name] = [];
}
},
register: function(event, subscriber) {
if (typeof subscriber === "object" && typeof subscriber.notify === 'function') {
this.addEvent(event);
this.events[event].push(subscriber);
}
},
notify: function(event, data) {
var events = this.events[event];
for (var e in events) {
events[e].notify(data);
}
}
};
var Prop1 = {
notify: function() {
alert('prop1 changed');
}
};
var Prop2 = {
notify: function() {
alert('prop2 changed');
}
};
$(document).ready(function(){
MyVar.register('prop1',Prop1);
MyVar.register('prop2',Prop2);
MyVar.setProp1('New Var');
MyVar.setProp2('New Var');
});
用法使用setter方法而不是直接设置object属性,然后该方法向正在监视它的其他对象触发notify事件
你看过这些吗?***现在还有一种类似于getter和settings的方法,消费者只需使用普通赋值(=
)和属性访问object.property
或对象[propertyKey]