如何爲原型指定默認吸氣劑? 使用默認的getter時,我的意思是調用obj.undefinedProperty123
的函數。如何定義使用ECMAScript 5的默認getter和setter?
我試圖Object.prototype.get =函數(屬性){..}但這不是在這種情況下被調用。
如何爲原型指定默認吸氣劑? 使用默認的getter時,我的意思是調用obj.undefinedProperty123
的函數。如何定義使用ECMAScript 5的默認getter和setter?
我試圖Object.prototype.get =函數(屬性){..}但這不是在這種情況下被調用。
我不確定你在問什麼。但是,如果您想在用戶嘗試訪問object.nonExistingProperty
時調用方法。我不認爲有什麼辦法可以做到這一點。
這正是我想要做的。 我認爲這是可能的,我想我記得我之前做過 - 如果我只是知道如何... – Manuel 2010-06-24 18:47:09
火狐有可能與非標準noSuchMethod: -
({__noSuchMethod__:function(){alert(1);}}).a();
什麼加雷思說,除了它的__noSuchMethod__
。
或者,也許你在想PHP的?
這裏是在最近標準化屬性getter/setter方法一篇很好的文章,突出以前的一些不規範的化身。
摘要:有沒有標準 '包羅萬象' 的getter/setter(還),但Object.defineProperty是未來。
你需要等待ECMA6「代理」制度的實施,專做正是這一點。見http://wiki.ecmascript.org/doku.php?id=harmony:direct_proxies。
在ECMAScript中5,你只能截取特定的命名屬性的get/set操作通過Object.defineProperty
(不是普遍的所有屬性):
Object.definedProperty(someObj, "someProp", {
get: function() {
console.log("you tried to get someObj.someProp");
return "foo";
}
});
這裏,get
功能將運行任何時間碼試圖讀取someObj.someProp
。
在即將到來的ECMAScript 6草案,這將通過proxies成爲可能。代理具有基礎目標對象和set/get函數。任何時候在任何代理的屬性上發生設置或獲取操作時,都會運行相應的函數,並將代理的目標對象,使用的屬性名稱和嘗試中使用的值作爲參數運行。
var proxyHandler = {
get: function(obj, name){
console.log("you're getting property " + name);
return target[name];
},
set: function(obj, name, value) {
console.log("you're setting property " + name);
target[name] = value;
}
}
var underlyingObj = {};
// use prox instead of underlyingObj to use get/set interceptor functions
var prox = new Proxy(underlyingObj, proxyHandler);
這裏,設置在prox
獲取屬性值將導致set
/get
功能來運行。
我不認爲有辦法做到,即使有任何非標準的實現,肯定不能與ECMAScript的5有一個叫'__noSuchMethod__'在Firefox方法不標準執行,並可能會在Chrome,但對於非功能屬性沒有任何相似之處。唯一的路線似乎使用了一個包裝函數,比如'get',通過它來訪問所有的屬性。 – Anurag 2010-06-24 19:19:21
相關:[所有屬性的JavaScript getter](http://stackoverflow.com/q/994143/1048572) – Bergi 2014-09-29 17:08:35