实例之间共享的原型属性
Which prototype properties shared between instances
http://jsfiddle.net/F5ZSA/1/
这是上面的代码:
"use strict";
function Human()
{
this.myname;
this.things = [];
this.addThing = function(string)
{
this.things.push(string);
}
this.getThings = function()
{
return this.things;
}
this.setName = function(name)
{
this.myname = name;
}
this.getName = function()
{
return this.myname;
}
}
Mister.prototype = new Human();
function Mister()
{
}
var mister1 = new Mister();
var mister2 = new Mister();
mister1.setName("Peter");
mister2.setName("Steven");
mister1.addThing("mister1 reporting");
mister2.addThing("mister 2 reporting");
console.log(mister1.getName());
console.log(mister2.getName());
console.log(mister1.getThings());
console.log(mister2.getThings());
当您运行它时,结果表明每个Mister实例的"myname"属性不同,而"things"属性似乎在所有实例之间共享。它应该是那样的吗?如果是,那么在"继承"对象之间共享哪些原型属性的一般规则是什么?
来自其他OOP语言,我的直觉是每个对象都应该有一个单独的原型实例。尝试在js中强制执行它是个好主意吗?
这是来自传统OOP语言的经典问题。通过创建新对象来复制原型。关键字"this"已经指代了新对象,但对原型中另一个对象的引用仍然指代了内存中的同一空间。当您创建两个对象时,您将创建对同一对象的两个引用(在本例中为数组(
以下内容将如您所期望的那样发挥作用。为了解决"这个"问题,我在那里放了init方法来初始化对象,在这种情况下,创建多个数组对象,每个对象都是新对象Mister。
var Human = function()
{
this.myname;
this.things;
this.things;
return {
addThing:function(string)
{
this.things.push(string);
},
getThings:function()
{
return this.things;
},
setName: function(name)
{
this.myname = name;
},
getName: function()
{
return this.myname;
},
init: function(){
this.things = new Array();
}
}
}
var Mister = function(){}
Mister.prototype = new Human();
var mister1 = new Mister();
var mister2 = Object.create(Mister.prototype);
mister1.init();
mister2.init();
mister1.setName("Peter");
mister2.setName("Steven");
mister1.addThing("mister1 reporting");
mister2.addThing("mister 2 reporting");
console.log(mister1.getName());
console.log(mister2.getName());
console.log(mister1.getThings());
console.log(mister2.getThings());
相关文章:
- 附加到原型属性的Do函数没有闭包
- 日期原型属性
- JS构造函数的原型属性与其原型之间的区别
- 为什么函数对象的实例没有继承函数原型属性
- 为什么浏览器显示原型属性不同
- 为什么在Function.prototype上没有原型属性
- 函数的原型属性
- 原型继承和原型属性
- 在JavaScript中,函数的默认值是多少'的原型属性
- Chrome 不支持 Javascript 中的原型属性吗?
- 我应该在JavaScript中将什么连接到子原型属性
- 更新 JavaScript 中的原型属性
- 请解释有关 JavaScript 中的原型属性和函数构造函数的详细信息
- 为什么原型函数无法读取原型属性
- 与对象属性同名的原型属性
- 如何获取原型属性列表
- 构造函数中的方法与函数的原型属性之间的差异
- JavaScript 原型属性
- 函数对象__proto__和原型属性
- 未在自定义 OL3 控件的构造函数中定义的原型属性