2014-05-01 54 views
2

我想模擬一個在JSBin中有多個方法的對象。我不想重新定義整個方法是JSBin。主要是因爲方法被頻繁添加,而我只是試圖探索我想要的甚至是可能的。有沒有一種方法可以創建一個對象,以便調用任何方法,它只會返回一個任意值?創建一個方法,如果它不存在

var ret = { 

    //no methods 

}; 

var result = ret.getSomeVal("funny_cat.gif"); 

console.log(result); //funny_cat.gif 

東西能攔截此調用ret並自動創建returnSomeVal方法,所以它會只返回任何參數傳遞給它?

+0

http://stackoverflow.com/questions/13849533/dynamic-getter-and-setters-a-possibility? – eithed

回答

1

在Ruby中,此功能稱爲method_missing。這是一種當您調用尚未在對象上定義的方法時被調用的方法。

從此,你可以做任何你想做的事情,比如給自己發送一封電子郵件來通知你,某些用戶試圖調用一個未定義的方法,甚至在這種情況下返回一些默認響應。

我發現此端口的method_missing爲javascript。它看起來像你以後:

https://github.com/nakajima/method-missing-js

1

Proxies在設計上允許捕捉,府這樣。

代理是程序員必須用JavaScript定義語義的對象。

因此,您可以重新定義obj[...]以返回未定義屬性的默認值而不是undefined。它們是EcmaScript.next的一個計劃API,因此,儘管許多瀏覽器在規範定稿時一直在實施它們,但它們尚未標準化。

simple example回報37任何

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

var p = new Proxy({}, handler); 

您可以修改此返回的方法來代替。

function returns_37() { return 37; } 

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

var p = new Proxy({}, handler); 
相關問題