繁体   English   中英

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

[英]How do I get each instance to inherit their own instance of a member?

在以下代码中,我有两个Book Collection。 一个集合包含“ Moby Dick”,另一个集合包含“ The Firm”。 但是,当我看第二个系列时,也有Moby Dick。 如何创建不共享相同数据的图书?

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

我结束了这个:

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

this使用每个实例的值:

function Books () {
    this.stuff = [];
}

然后在集合中:

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

当前,设置“书籍”的原型时只能创建一个stuff数组。 然后,所有继承的getter和setter都引用那个变量。


完整的代码

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

您的代码有很多结构性问题。 您在Collection中的方法也应该原型化,而目前还不是。 如果您不尝试访问“材料”的方法的原型,那么最终将有多个函数引用完全相同的属性,而不是创建它们自己的该属性的实例。 遵循以下结构:

主要收藏

function Collection () {
    this.stuff = [];
};

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

Collection.prototype.add = function(item){
    this.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(yourBooks.get());

JSFiddle与工作示例:

的jsfiddle

可从中获取有关Javascript原型的更多详细信息的资源:

Mozilla文件

如果您对代码本身或结构更改有任何疑问,请联系我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM