2012-11-30 50 views
1

如何寫有2種方法(警報和執行console.log),以便能夠使用這樣的功能(對象):javascript函數參數的地方

fname("text").alert //-now text is alerted; 
fname("text").cons //-now text shows in console log. 

方法不BYT執行的重要途徑。我知道它必須是自我喚醒功能,但我不能這樣做。我不想用這種方式 - fname.alert(「文本」)。

問候 KRISS

回答

5

這是不可能在任何地方工作,任何理智的方式。您發佈的示例需要您爲這些屬性定義一個訪問者 - 並且只適用於現代JS引擎。

無論如何,這裏的代碼實際上會做到這一點。 但請不要在任何實際應用中使用它!看到最後的代碼塊一個更好的解決方案

function fname(message) { 
    var obj = {}; 
    Object.defineProperty(obj, 'alert', { 
     get: function() { 
      alert(message); 
     } 
    }); 
    Object.defineProperty(obj, 'cons', { 
     get: function() { 
      console.log(message); 
     } 
    }); 
    return obj; 
} 

這工作,因爲fname('hello').alert會導致getter函數爲alert財產被執行 - 雖然這樣的功能通常應該返回一個值有什麼可阻止它做類似於顯示alert()消息的內容。


什麼你可以實現該作品無處不會是這樣的,雖然方式:

fname('text').alert(); 
fname('text').cons(); 

這可以這樣進行:

function fname(message) { 
    return { 
     alert: function() { 
      alert(message); 
     }, 
     cons: function() { 
      console.log(message); 
     } 
    } 
} 
+0

比你非常問候 –

+0

不客氣。請接受答案,因爲這非常適合堆棧溢出的感謝。您可以點擊我帖子左側的灰色複選標記圖標。 – ThiefMaster

4
function fname(str) { 
    return { 
     alert:function(){alert(str)}, 
     cons:function(){console.log(str)} 
    } 
} 

fname("text").alert()提醒text

+0

這可能不是最有效的做事方式,因爲我已經讀到匿名函數實際上是在它們所屬的函數中重建的。 – corazza

+0

如果我們能夠看到這種結構的用途,效率將是相關的。 –