0

我通过将 C# 代数表达式编译器移植到 Javascript 来自学 Javascript。我有一个 OpBank 对象,它存储每个运算符的属性,例如,它是符号和指向实现该运算符的函数的指针。我知道 JS 没有函数指针,但我不知道还能叫什么。

当我尝试加载页面时,出现以下错误:

“Microsoft JScript 运行时错误:无法获取属性 'Plus' 的值:对象为空或未定义”

当浏览器尝试解析底部的 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,而且我不希望每个方法都必须实例化一个新的 OpBank,因为它是一个非常大的对象(上面只显示了其中的一部分) .

4

2 回答 2

2

OpBank在评估对象文字时还不存在。

您可以简单地将其分为两个步骤:

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

这应该可以工作,至少在萤火虫控制台上。

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 回答