原型声明的函数不是函数

时间:2015-05-04 16:05:58

标签: javascript prototype prototype-programming

var AnArray=(function(){
    var anArray=[];

    AnArray.prototype.getAnArray=function(){
        return anArray;
    }

    AnArray.prototype.setArray=function(id,val){
        anArray[id]=val;
    }
});

var objAnArray=new AnArray();

console.log(objAnArray.getAnArray());

当我尝试调用objAnArray.getAnArray();时,它返回它不是函数

但是,以下情况可以正常使用

var Index=(function(){
    var Index=1;

    Index.prototype.getIndex=function(){
        return Index;
    }
    Index.prototype.setIndex=function(val){
        Index=val;
    }
});

var objIndex=new Index();

console.log(objIndex.getIndex());

原型是否无法返回数组?

1 个答案:

答案 0 :(得分:3)

您使用anArray作为对象,而不是数组。使用:

this.anArray = {}; // not []

此外,您的代码看起来很奇怪。您在构造函数中声明原型。相反地​​声明它:

function AnArray() {
    this.anArray = {};
}

AnArray.prototype.getArray=function(){
    return this.anArray;
}

AnArray.prototype.setArray=function(id,val){
    this.anArray[id]=val;
}

在构造函数中,您重新声明原型并将每个实例中的私有变量anArray绑定到AnArray的最后一个实例。

Index相同。

这证明了不良行为:

var AnArray=(function(){
    var anArray={};

    AnArray.prototype.getArray=function(){
        return anArray;
    }

    AnArray.prototype.setArray=function(id,val){
        anArray[id]=val;
    }
});
var a = new AnArray();
var b = new AnArray();
a.setArray("foo", "bar");
b.getArray(); // { foo: "bar" }