我在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和获取长度。 任何帮助都非常感谢!
答案 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