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

Javascript: Trying to set function as a member of an object in an array

本文关键字:数组 对象 成员 设置 函数 Javascript      更新时间:2023-09-26

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

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

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

当浏览器尝试解析底部的运算符数组时,就会发生错误,它抱怨OpBank.Plus。 我尝试了OpBank.Plus,OpBank.Plus(),只是普通的旧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,因为它是一个非常大的对象(上面只显示了一部分)。

计算对象文本时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)))
];

应该有效,至少在Firebug控制台上是这样。

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