首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让每个实例继承自己的成员实例?

如何让每个实例继承自己的成员实例?
EN

Stack Overflow用户
提问于 2013-10-09 03:17:15
回答 2查看 49关注 0票数 2

在下面的代码中,我有两个图书集合。一个收藏集有“白鲸”,而另一个收藏集有“公司”。然而,当我看第二个收藏时,它也有“白鲸”。如何创建不共享相同数据的图书?

代码语言:javascript
复制
function Collection () {
    var stuff = [];
    this.get = function () {
        return stuff;
    };
    this.add = function (item) {
        stuff.push(item);
    };
}
function Books () {}
Books.prototype = new Collection ();

var myBooks = new Books();
myBooks.add("Moby Dick");

var yourBooks = new Books();
yourBooks.add("The Firm");

console.log(yourBooks.get()); // ["Moby Dick", "The Firm"]

我最终选择了这个:

代码语言:javascript
复制
function Collection () {
    var stuff = [];
    this.get = function(){
        return stuff;
    };
    this.add = function(item){
        stuff.push(item);
    };
}
function Books () {
    Collection.call(this);
};

Books.prototype = new Collection();

Books.prototype.constructor = Books;

var myBooks = new Books();
myBooks.add("Moby Dick");

var yourBooks = new Books();
yourBooks.add("The Firm");

console.log(myBooks.get());
EN

回答 2

Stack Overflow用户

发布于 2013-10-09 03:21:05

this使用每个实例的值

代码语言:javascript
复制
function Books () {
    this.stuff = [];
}

然后在集合中:

代码语言:javascript
复制
this.get = function () {
    return this.stuff;
};

当前,当您设置Books的原型时,只创建了一个stuff数组。然后,所有继承的getter和setter都引用该变量。

Complete code

代码语言:javascript
复制
function Collection () {
    this.get = function () {
        return this.stuff;
    };
    this.add = function (item) {
        this.stuff.push(item);
    };
}
function Books () {
    this.stuff = [];
}

Books.prototype = new Collection ();

var myBooks = new Books();
myBooks.add("Moby Dick");

var yourBooks = new Books();
yourBooks.add("The Firm");

console.log(myBooks.get()); // ["Moby Dick"]
console.log(yourBooks.get()); // ["The Firm"]
票数 6
EN

Stack Overflow用户

发布于 2013-10-09 03:56:04

你的代码有很多结构问题。你在Collection中的方法也应该是原型化的,但它们目前还没有原型化。如果你不原型化那些试图访问“东西”的方法,你就需要多个函数引用完全相同的属性,而不是创建它们自己的该属性的实例。取而代之的是以下结构:

集合

代码语言:javascript
复制
function Collection () {
    this.stuff = [];
};

Collection.prototype.get = function(){
    return this.stuff;
};

Collection.prototype.add = function(item){
    this.stuff.push(item);
}

图书类继承自集合

代码语言:javascript
复制
function Books () {
    Collection.call(this);
};

Books.prototype = new Collection();
Books.prototype.constructor = Books;

使用您的图书

代码语言:javascript
复制
var myBooks = new Books();
myBooks.add("Moby Dick");

var yourBooks = new Books();
yourBooks.add("The Firm");

console.log(yourBooks.get());

带工作示例的JSFiddle:

JSFiddle

您可以在其中获得有关Javascript原型的更多详细信息的源代码:

Mozilla Docs

如果你对代码本身或结构上的变化有任何疑问,请在下面告诉我。

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

https://stackoverflow.com/questions/19256386

复制
相关文章

相似问题

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