, , Object.observe spec.
, Object.getNotifier(obj).performChange(changeType, changeFn):
changeFnchangeFn, , objchangeFn : obj
, %NotifierPrototype%.performChange(changeType, changeFn) - , .
, , -:
1:
increment: function(amount) {
var notifier = Object.getNotifier(this);
notifier.performChange(Thingy.INCREMENT, function() {
this.a += amount;
this.b += amount;
});
notifier.notify({
object: this,
type: Thingy.INCREMENT,
incremented: amount
});
}
:
performChange() .undefined, performChange() -notify()
2:
increment: function(amount) {
var notifier = Object.getNotifier(this);
notifier.performChange(Thingy.INCREMENT, function() {
this.a += amount;
this.b += amount;
return { incremented: amount };
});
}
:
performChange() .- ,
performChange() , , , notify() 1: { object: Object, type: Thingy.INCREMENT, increment: amount }
, performChange(), . , .
. , , increment() , increment() - .
, :
performChange()performChange()notify()
, increment() .
increment() ( = , increment(), ), : Object.deliverChangeRecords(callback).
, callback , .
, :
(function() {
var obj = { prop: "a" };
Object.observe(obj, function(changes) {
console.log(changes);
});
obj.prop = "b";
Object.deliverChangeRecords(function(changes) {
console.log(changes);
});
console.log("End of execution");
})();
Hide result:
(function() {
var obj = { prop: "a" },
callback = function(changes) {
console.log(changes);
};
Object.observe(obj, callback)
obj.prop = "b";
Object.deliverChangeRecords(callback);
console.log("End of execution");
})();
Hide result, Object.observe(obj, callback) obj callback obj ( [[ChangeObservers]] ). ( Object.observe()) , . ( , , type , Object.observe() , - .)
, . , .
Object.deliverChangeRecords(callback): callback , .
, deliverChangeRecords() - . , deliverChangeRecords() , . , deliverChangeRecords().
(function() {
var obj1 = { prop1: "a" },
obj2 = { prop2: "a" },
commonCallback = function(changes) {
console.log(changes);
};
Object.observe(obj1, commonCallback);
Object.observe(obj2, commonCallback);
obj1.prop1 = "b";
obj2.prop2 = "b";
Object.deliverChangeRecords(commonCallback);
})();
Hide result, .