2013-03-01 41 views
2

如何/我可以截取請求以獲取javascript對象的方法/屬性,並返回自定義值。攔截獲取javascript對象的屬性/方法

例如,

var obj = { 
    // This "get" method is where I want to replace the call to get a property of an object. 
    get : function(propertyName) { 
     if (propertyName == 'somePropertyThatDoesntExist') { return 1; } 
     else { return 0; } // Something like this? 
}; 

// Either this method of access, 
var myValue1 = obj.somePropertyThatDoesntExist 
var myValue2 = obj.someOtherPropertyThatDoesntExist 

// Alternatively, 
var myValue3 = obj['somePropertyThatDoesntExist'] 
var myValue4 = obj['someOtherPropertyThatDoesntExist'] 

所以myValue1和myValue3將具有1的值,並且myValue2和myValue4將具有0

目前的值,myValue1,2,3,4將全部是「未定義」。

+0

我想你錯過了一個}爲你的函數 – 2013-03-01 12:52:30

+0

這裏的一個類似的問題 - http://stackoverflow.com/questions/2756431/catch-access-to-undefined-property-in-javascript – 2013-03-01 13:06:42

回答

0

我不認爲有一種方法來攔截未定義的屬性的訪問。您可以隨時做以下

if(obj.someProperty != undefined) 
    obj.someProperty // access the property 

或者,你可以寫一個get方法

var obj = { 
    someProperty : "val", 
    get : function(propertyName) { 

     if (this[propertyName] == undefined) { return 0; } 
     else { return this[propertyName]; } 
    } 
}; 

,並使用它像

obj.get("someProperty") // returns 0 if property is not defined. 
+0

你不是指obj.get('someProperty');? – 2013-03-01 13:15:10

+0

我試圖替換一個現有的對象,我不能替換調用它的JavaScript代碼,所以obj.get('')並檢查它是否在客戶端代碼中未定義對我來說不是選項。 – 2013-03-01 13:15:59

+0

@BenElis抱歉,這是一個錯字。修復。那麼,在這種情況下,這種技術將不起作用 – 2013-03-01 13:26:06