如何阻止函数被视为javascript对象中的属性?

时间:2014-12-30 09:11:45

标签: javascript class object methods properties

我在javascript(Node.js,如果它很重要)应用程序中有以下对象。

function myObject (myInput){
    this.myValue = myInput;
    this.myAssociativeArray = {};
    this.myAssociativeArrayLen = function() {
        var k;
        var l = 0;
        for (k in this.users){
            l = l + 1;
        }
       return l;
    };
}

当我调用length函数并将其记录到控制台时,我将其作为输出:

function () {
    var k;
    var l = 0;
    for (k in this.myAssociativeArray){
        l = l + 1;
    }
    return l;
}

我真的不确定这是怎么回事,但看起来这个函数被视为字符串属性,但我没有引号,那怎么可能是这种情况呢?我也注意到我使用的编辑器(Sublime)并没有像其他人一样改变最后一个颜色。我将长度函数作为对象的一部分,以便我可以调用myObjectInstance。 myAssociativeArray和获取长度。 任何帮助都非常感谢!

2 个答案:

答案 0 :(得分:1)

有可能在你的console.log中,你实际上没有运行该函数,你可能只是在引用它。

console.log(myObject.myAssociativeArrayLen());

vs(我认为你在做什么)

console.log(myObject.myAssociativeArrayLen);

答案 1 :(得分:0)

您正在尝试定义应该隐式调用的属性。 在这种情况下,您需要使用getter功能 但是getter不应该与函数构造函数一起使用,因为您可以编写在所有实例中共享的等效原型方法。
但是你仍然可以通过以下方式添加getter:

function myObject(myInput) {
    this.myValue = myInput;
    this.myAssociativeArray = {};
    Object.defineProperties(this, {
            "myAssociativeArrayLen" : { //add the myAssociativeArrayLen property to this instance
                "get" : function() {//define getter
                    //your logic
                    return smthing;
                },
            }
        });
}
var x = new myObject(5);
alert(x.myAssociativeArrayLen);//implicitly invoke the associated getter function