如何在JavaScript中模擬PHP風格的__get()和__set()魔術獲取器/設置器?很多人說這是不可能的。我幾乎可以肯定,這是可能的,因爲諸如nowjs(http://nowjs.com)這樣的項目就是這樣做的。監視所有JavaScript對象屬性(魔法獲取器和設置器)
我知道你可以利用get和set,但是當你不確定屬性名稱是什麼時,這些不起作用。例如,如果您希望在創建新屬性時執行事件處理程序,該怎麼辦??
的什麼我想要做的例子:
var obj = {};
notify(obj, function(key, value) {
//key is now the name of the property being set.
//value is the value of the property about to be set
console.log("setting " + key + " to " + value);
});
obj.foo = 2; //prints "setting foo to 2"
obj.bar = {a: 2}; //prints "setting bar to [Object]"
//Notice that notify() worked even though 'foo' and 'bar' weren't even defined yet!
(現在的問題是類似以下問題:
)
編輯:它看起來像這個功能被稱爲「動態代理」,應該出現在ECMAScript「和諧」標準(可能是ES6)。你可以閱讀更多here。一個新的'代理'對象引入了幾個方法(即創建()和createFunction())。這裏
//Constructing an object proxy (proto is optional)
var proxy = Proxy.create(handler, proto);
proxy.foo = 2; //Triggers 'set' function in the handler (read about it)
底線:
一個能做到這一點,並不在大多數瀏覽器工作,但實現可用於Node.js的:node-proxy。
此功能稱爲代理是ECMAScript 6的一部分而不是5. – Raynos
良好的捕獲。修改了我的帖子。謝謝! – BMiner