2015-06-15 27 views
0

我希望能夠攔截以前尚未在JavaScript中設置的對象的訪問屬性。我想知道是否有可能?在JavaScript中攔截對象屬性訪問

在Python等效是__getattr__內置方法:

class P(object): 
    def __getattr__(self, name): 
     return name 

p = P() 
x = p.x 

p.x不先前存在的,但__getattr__偵聽接入到先前未被創建的成員變量。在JavaScript中有類似的東西嗎?

回答

0

您將可以使用Proxies來做到這一點。從MDN例如:

var handler = { 
    get: function(target, name){ 
     return name in target? 
      target[name] : 
      37; 
    } 
}; 

var p = new Proxy({}, handler); 
p.a = 1; 
p.b = undefined; 

console.log(p.a, p.b); // 1, undefined 
console.log('c' in p, p.c); // false, 37 

然而,currently browser support is basically non-existent和polyfilling這是不是真的有可能。

+0

謝謝。這裏重複問題的網絡禮儀是什麼?我應該刪除它還是保持原樣? – huggie

+1

離開它。這就像複製品的「路標」。 –

+1

我想這可能會有用。我用「攔截」而不是「catch」或「dynamic setter」這個詞,這樣對那些像我這樣想的人會有所幫助。 – huggie