Javascript:尝试将函数设置为数组中对象的成员

时间:2012-04-18 13:37:25

标签: javascript arrays function-pointers

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

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

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

当浏览器尝试解析底部的Operators数组时发生错误,它抱怨OpBank.Plus。我尝试了OpBank.Plus,OpBank.Plus(),只是普通的老版本,而且这个.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(){}然后使用prototype来添加函数和数组吗?我不想这样做因为我在应用程序的生命周期中只需要一个OpBank而且我不希望每个方法都必须实例化一个新的OpBank,因为它是一个非常大的对象(上面只显示了它的一部分)

2 个答案:

答案 0 :(得分: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)))
];

答案 1 :(得分:0)

这应该可行,至少在firebug控制台上。

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