首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原型对象数组

原型对象数组
EN

Stack Overflow用户
提问于 2013-03-09 03:31:00
回答 2查看 86关注 0票数 2

我有一个很好的问题。我需要理解这一点

代码语言:javascript
复制
Foo = function(){
};


Foo.prototype = {
buttons: new Array(),
index:'',
add: function(value)
{
    this.buttons.push(value);
},
clear:function(){
    this.buttons=new Array();
},
count:function(){
    return(this.buttons.length);
},
setIndex:function(index){
    this.index;
},
getIndex:function(index){
    return this.index;
}
};

var A= new Foo();
var B= new Foo();

A.add('toto');
B.add('tata');

A.setIndex(8);
B.setIndex(44);

alert(A.count()+"---"+A.getIndex());

这个代码告诉我:“2-8”!

所以A.count()返回A.count() + B.count()。B.count()也是如此!!

有没有人能给我解释一下,已经有这个问题了?怎么办?我只需要数组“按钮”是唯一的,适合每个对象。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-09 03:33:02

这不是原型继承的工作方式,AB拥有相同的原型,这意味着它们拥有相同的buttons数组。

在JavaScript中,继承是典型的,您希望每个"Foo“对象都有一个单独的按钮数组,但是您要将其添加到Foo的原型中,以便在其所有实例之间共享。

您可以对此进行更改:

代码语言:javascript
复制
var Foo = function(){
};

代码语言:javascript
复制
Foo = function(){
   this.buttons = []; //add an empty buttons array to every foo element.
};

这将使它工作,另一种选择是首先调用clear方法,它将实例化一个新的buttons数组。

请注意,原型继承主要是关于共享功能、,而不是属性。您希望每个Foo实例都具有相同的功能,但每个实例都有自己的buttons数组。

一些帮助你的资源:

Here is a good tutorial about how the prototypical chain works on MDN

Here is Addy Osmani's (Google) chapter about the constructor pattern,出自他的JavaScript patterns一书

在你的代码中一些其他技巧:

语法new Array()可以缩写为[]。在setIndex中,您实际上并没有将索引分配给任何对象。在Foo的构造函数中声明index可能更好。

请注意,当您在原型链上存在对象的属性时,它会在对象上创建一个新属性,而不是在原型上修改该属性。

票数 5
EN

Stack Overflow用户

发布于 2013-03-09 03:34:35

当您在原型中定义变量时,它将在所有Foo实例之间共享。您必须在对象(函数) Foo中定义行为,以便每个Foo实例都有一个数组实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15301815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档