[英]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与工作示例:
可从中获取有关Javascript原型的更多详细信息的资源:
如果您对代码本身或结构更改有任何疑问,请联系我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.