javascript - 原型(prototype)声明的函数不是函数

标签 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());

原型(prototype)无法返回数组吗?

最佳答案

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

this.anArray = {}; // not []
<小时/>

而且你的代码看起来很奇怪。您在构造函数中声明原型(prototype)。像这样声明它:

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

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

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

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

索引相同。

这表明了不良行为:

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" }

关于javascript - 原型(prototype)声明的函数不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30034645/

相关文章:

self - "Pure"原型(prototype)语言

Javascript:数组、对象、排序和原型(prototype)?

javascript - 为什么在调用函数时多次打印 - AngularJS

javascript - 带有点击事件的 jQuery 动态 ajax 数据

Javascript 原型(prototype)与通用函数 - 性能/可读性

javascript - 尝试了解 JavaScript 中的继承——这里发生了什么?

javascript - 如何正确地将 jQuery 插件导入 Node.JS?

JavaScript:如何访问构造函数的原型(prototype)?

javascript - 如何在 jquery ajax 成功 html 响应中找到输入隐藏元素?

javascript - 如何防止在页面加载时执行JavaScript函数?