2012-04-18 52 views
0

我教我自己Javascript通過將C#代數表達式編譯器移植到Javascript中。我有一個OpBank對象,用於存儲每個運算符的屬性,例如它是符號和指向實現該運算符的函數的指針。我知道JS沒有函數指針,但我不知道還有什麼要調用它。Javascript:嘗試將函數設置爲數組中的對象的成員

當我嘗試加載網頁,我得到以下錯誤:

「Microsoft JScript運行錯誤:無法獲得屬性‘加上’值:對象爲null或undefined」

的當瀏覽器試圖解析底部的操作符數組時,會發生錯誤,這是對OpBank.Plus的抱怨。我嘗試了OpBank.Plus,OpBank.Plus(),只是普通的舊Plus和this.Plus。無論如何,當操作符數組被加載時,我無法識別Plus函數。

var OpBank = { 
    Plus: function (left, right) { 
     return (left + right); 
    }, 

    Minus: function (left, right) { 
     return (left - right); 
    }, 

    Operators: [ 
     (new KeyValuePair("+", new ABinaryOperator("+", 1, OpType.Binary, "+", OpBank.Plus))), 
     (new KeyValuePair("-", new ABinaryOperator("-", 1, OpType.Binary, "-", OpBank.Minus))) 
     ] 
} 

是我試圖不可能的?我是否應該使用OpBank的構造函數語法,即var ObBank = function(){}然後使用prototype來添加函數和數組?我不想這樣做,因爲我只需要一個OpBank來應用程序的生命,而且我不希望每種方法都必須實例化一個新的OpBank,因爲它是一個非常大的對象(僅顯示了其中的一部分) 。

+0

呃,你是用IE/WSH學習JavaScript的?更好地使用一個合理的環境,比如[node.js](http://nodejs.org/)! – ThiefMaster 2012-04-18 13:39:11

回答

2

OpBank在評估對象字面值時尚不存在。

你可以簡單地把它分爲兩個步驟,但:

​​
+0

謝謝ThiefMaster!如何在軟件中解決絕大多數難以解決的問題通常非常簡單,這真是太神奇了。 – sitterdave 2012-04-18 17:52:35

+0

順便說一句,@ThiefMaster感謝您的快速回復。我也得看看node.js - 謝謝你的提示。 – sitterdave 2012-04-18 17:58:00

0

這應該工作,至少螢火控制檯上。

var testObj = { 
    first: function(){ 
     console.log("first"); 
    }, 
    second: function(){ 
     console.log("second"); 
    }, 
    third: function(){ 
     return typeof this.first; 
    } 
}; 
testObj.third(); 
+0

感謝您的快速回復! – sitterdave 2012-04-18 17:58:41