JavaScript中的原型概念

问题描述 投票:0回答:1

我有一些与原型有关的问题。

如果我们创建了一个对象,请在Dog函数构造函数的帮助下说Person。说Person在每个实例成员上都有2个属性。

var Dog = function (name,color){
   this.name =  name,
   this.color = color
};

现在我们已经从中创建了10个对象,例如PugBulldog等。>

var Pug =new Dog('pug','white');
var Bulldog =new Dog('Bulldog','black');

现在我们突然想在Dog

中添加另一个属性,以使所有object都可以访问它。我们可以通过两种方式做到这一点:
  1. 将其添加到函数构造函数this.leg : 4
  2. var Dog = function (name,color){
        this.name =  name,
        this.color = color,
        this.leg = 4
    };
    

  1. 使用]添加>
    Dog.prototype.leg = 4;
    
  2. 现在我的问题是在每个这些变体中,该属性将被添加为其原型属性,意味着作为原型成员而不是作为实例成员?为什么?

如果创建对象后我们想要添加一些属性,并且希望将其添加为实例成员意味着拥有属性,我该怎么办?

我在浏览器控制台中得到的内容:

Pug { name : 'pug',color :'white'}
_ proto_ : { leg :4 }

我期望的是:

Pug { name : 'pug',color :'white',leg :4 }
_proto_ :Object

我对原型有一些疑问。如果我们创建了一个对象,请通过Person函数构造函数说Dog。说人在每个实例成员上都有2个属性。 var Dog = ...

javascript prototype prototype-chain jsobject
1个回答
0
投票

[执行此操作时,实际上是在修改原型本身,而不是内存中的整个Dog.prototype.leg = 4;实例。但是,将来的实例化对象将继承该新属性。

实例化时,内存中的现有实例将继续具有先前存在的属性。

© www.soinside.com 2019 - 2024. All rights reserved.