Javascript 为什么原型中的属性值不一致?
我调用了Javascript 为什么原型中的属性值不一致?,javascript,prototype,Javascript,Prototype,我调用了console.log(Family.prototype.money),值为200,这确认asset是函数Family的原型。但是,当我调用console.log(other.money)时,值是1000,我之前分配给原型的值。这里怎么了?看起来另一个对象的原型与函数族的原型不同,这与我在《面向对象的Javascript》一书中读到的完全矛盾 function Family(father, mother, children){ this.fathe
console.log(Family.prototype.money)
,值为200,这确认asset
是函数Family
的原型。但是,当我调用console.log(other.money)
时,值是1000,我之前分配给原型的值。这里怎么了?看起来另一个对象的原型与函数族的原型不同,这与我在《面向对象的Javascript》一书中读到的完全矛盾
function Family(father, mother, children){
this.father = father,
this.mother = mother,
this.children = children,
this.num = function(){
return (this.children.length+2);
}
}
Family.prototype.money = 1000; // notice!!!!
var myFamily = new Family('Hung', 'Hong', ['Phuong', 'Lien', 'Hiep']);
var other = new myFamily.constructor('Lan', 'Linh', ['Tung']);
var money = other.money;
var asset = {
money: 200,
car: 2,
house: 10
}
Family.prototype = asset;
函数的
原型
不是实例对象的实际原型。当您使用new
时,prototype
对象用作内部[[prototype]]]
属性的模板,在某些浏览器中作为\uuuuuu proto\uuuu
公开。因此,在更改原型之前,此表达式为true
:
Family.prototype === other.__proto__ // true
Family.prototype = asset;
在您更改它之后,它是false
:
Family.prototype = asset;
Family.prototype === other.__proto__ // false
这并不矛盾-您正在替换对象的原型,但其他对象仍然引用原始原型。不确定您认为此操作必须传播的原因。var a=1,b=a;a=2
你希望现在的b
是1
还是2
?我听不懂你的问题。别费心了。我这样问是因为我认为函数的原型与实例对象的原型相同。谢谢你,伙计!你能告诉我如何返回实例对象的原型吗?它不工作。当我调用d console.log(other.prototype)时,控制台日志返回undefined@PMH实例有一个内部的[[Prototype]]
属性,该属性引用了在构造它们时作为其构造函数的公共原型的对象。如果以后将构造函数的原型更改为新对象,则现有实例仍然引用旧对象。新实例将引用新对象。要获取实例[[Prototype]]
,请使用ES5。虽然instance.constructor.prototype可以工作(但不可靠),但在该语言的早期版本中并没有等效项。