Ian*_*gan 2 javascript watch observable
我想知道是否有人可以帮助我做一些我认为相当直接的事情:
基本上我想扩展所有数据类型的原型(包括内部类型),以允许某种自定义函数,考虑:
var x = "some string";
var y = 101;
x = "some other value";
y++;
x.onChange();
y.onChange();
Run Code Online (Sandbox Code Playgroud)
这是我之后的基本思想,但我真正想要的是实际上让onChange(在这个例子中)与实际变量(而不是标准原型扩展)的新函数不同,即:
x.onChange = function() {
alert("x.onChange");
}
y.onChange = function() {
alert("y.onChange");
}
Run Code Online (Sandbox Code Playgroud)
这似乎没有用,但我必须错过一些非常简单的事情吗?我的意思是我可以扩展所有对象和类型并添加新功能......不是吗?
任何帮助将不胜感激!
我可能不想尝试将方法添加到现有类型,而是创建一个可以包装主要类型的对象.我会称之为"观察"一个值,并可能实现如下:
function observable(v){
this.value = v;
this.valueChangedCallback = null;
this.setValue = function(v){
if(this.value != v){
this.value = v;
this.raiseChangedEvent(v);
}
};
this.getValue = function(){
return this.value;
};
this.onChange = function(callback){
this.valueChangedCallback = callback;
};
this.raiseChangedEvent = function(v){
if(this.valueChangedCallback){
this.valueChangedCallback(v);
}
};
}
Run Code Online (Sandbox Code Playgroud)
然后可以使用它来观察任何值的变化(只要该值只能通过可观察类的方法改变 - 一个小的减法IMO).
这样的东西适用于上面的代码:
var obs = new observable(123);
obs.onChange(function(v){
alert("value changed to: " + v);
});
// the onChange callback would be called after something like obs.setValue(456);
Run Code Online (Sandbox Code Playgroud)
这里的实例 - > http://jsfiddle.net/MeAhz/
归档时间: |
|
查看次数: |
2211 次 |
最近记录: |