Observerable Property
by someprimetime
JavaScript
var Book = function(name, price) {
var priceChanging = [],
priceChanged = [];
this.name = function(val) {
return name;
};
this.price = function(val) {
if (val !== undefined && val !== price) {
for (var i = 0; i < priceChanging.length; i++) {
if (!priceChanging[i](this, val)) {
return price;
}
}
price = val;
for (var i = 0; i < priceChanged.length; i++) {
priceChanged[i](this);
}
}
return price;
};
this.onPriceChanging = function(callback) {
priceChanging.push(callback);
};
this.onPriceChanged = function(callback) {
priceChanged.push(callback);
};
};
var book = new Book('Javascript: The Good Parts', 23.99);
console.log('The name of the book is ' + book.name());
console.log('The price is: $' + book.price());
book.onPriceChanging(function(b, price) {
if (price > 100) {
console.log('System error, price is too high');
return false;
}
return true;
});
book.onPriceChanged(function (b) {
console.log('The book price has changed to: $' + b.price());
});
book.price(19.99);
book.price(200);
/* ECMAScript 5 */
function Book () {
var name = '';
Object.defineProperty(this, 'name', {
get: function() {
return name;
},
set: function(val) {
console.log(val);
name = val;
}
});
};