0

私は、C#代数式コンパイラをJavascriptに移植することで、自分自身にJavascriptを教えています。各演算子の属性を格納するOpBankオブジェクトがあります。たとえば、シンボルと、演算子を実装する関数へのポインターです。JSには関数ポインタがないことは知っていますが、他に何を呼び出すべきかわかりません。

ページを読み込もうとすると、次のエラーが発生します。

「MicrosoftJScriptランタイムエラー:プロパティ「Plus」の値を取得できません:オブジェクトがnullまたは未定義です」

このエラーは、ブラウザが下部のOperators配列を解析しようとしたときに発生し、OpBank.Plusについて不平を言っています。OpBank.Plus、OpBank.Plus()、昔ながらのPlus、this.Plusを試してみました。いずれにせよ、Operators配列がロードされたときに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(){}次に、プロトタイプを使用して関数と配列を追加しますか?アプリの存続期間中に必要なOpBankは1つだけであり、新しいOpBankはかなり大きなオブジェクトであるため、すべてのメソッドでインスタンス化する必要がないため、これはやりたくありませんでした(上に示したのはその一部のみです)。 。

4

2 に答える 2

2

OpBankオブジェクトリテラルが評価されている間はまだ存在しません。

ただし、単純に2つのステップに分割できます。

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

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

OpBank.Operators = [
    (new KeyValuePair("+", new ABinaryOperator("+", 1, OpType.Binary, "+", OpBank.Plus))),
    (new KeyValuePair("-", new ABinaryOperator("-", 1, OpType.Binary, "-", OpBank.Minus)))
];
于 2012-04-18T13:39:59.757 に答える
0

これは、少なくとも firebug コンソールでは機能するはずです。

var testObj = {
    first: function(){
        console.log("first");
    },
    second: function(){
        console.log("second");
    },
    third: function(){
        return typeof this.first;
    }
};
testObj.third();
于 2012-04-18T14:07:58.997 に答える