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

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

“ Microsoft JScript运行时错误:无法获取属性'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,并且我不希望每种方法都必须实例化一个新的OpBank,因为它是一个很大的对象(上面仅显示了一部分) 。

最佳答案

评估对象文字时,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)))
];

关于javascript - Javascript:尝试将函数设置为数组中对象的成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10210574/

10-09 23:37