2015-01-21 40 views
-1

我叫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; 
+2

这并不矛盾 - 你要替换的对象的原型,但其他对象仍参照原始原型。不知道为什么你认为这个操作必须传播。 – zerkms 2015-01-21 01:59:30

+0

'var a = 1,b = a; a = 2;'你现在期望'b'是'1'还是'2'? – zerkms 2015-01-21 02:00:16

+0

我不能按照你的问题。 – zerkms 2015-01-21 02:09:09

回答

0

函数的prototype不是实例对象的实际原型。当您使用new时,prototype对象将用作内部[[Prototype]]属性的模板,该属性在某些浏览器中显示为__proto__。所以,你改变prototype之前这种表达true

Family.prototype === other.__proto__ // true 
Family.prototype = asset; 

你chnge后,它是false

Family.prototype = asset; 
Family.prototype === other.__proto__ // false 
+0

你能告诉我如何返回实例对象的原型吗? – PMH 2015-01-21 02:11:03

+0

'object.prototype' – zerkms 2015-01-21 02:11:22

+0

它不起作用。当我调用console.log(other.prototype)时,控制台日志返回undefined; – PMH 2015-01-21 02:17:00

相关问题