Javascript原型链 - 多个对象,Commom原型

时间:2017-12-26 09:46:48

标签: javascript

如Javascript中所述,方法和属性不会在形式一个对象上复制到原型链中的其他对象,我的问题是如何维护具有不同值的不同对象中的相同属性?请查看下面的代码,以便清楚了解我的问题。

function Person( name ){ 
   this.name = name;
   this.greeting = function() {
      alert( 'Hi I\'m ' + this.name + '.' );
   }
}
var p1 = new Person( 'Mr. X' );
var p2 = new Person( 'Mr. Y' );

p1.greeting();
p2.greeting();

这里我们创建了两个对象person1和person2。由于原型对象的属性和方法将被链接,并且不会被复制到p1和p2,这些对象将如何分别维护其名称属性(' Mr.X和Mr.Y') ,并在问候消息中显示相应的名称?

1 个答案:

答案 0 :(得分:0)

此处,您的namegreeting属性不在原型中,但每个对象都拥有名称为namegreeting的自有属性。< / p>

如果要添加将在所有实例之间共享的内容,则需要在Person.prototype对象中分配它。这里名称为greeting的属性在所有实例中共享。

&#13;
&#13;
function Person( name ){ 
   this.name = name;
}

Person.prototype.greeting = function() {
   alert( 'Hi I\'m ' + this.name + '.' );
}

var p1 = new Person( 'Mr. X' );
var p2 = new Person( 'Mr. Y' );

p1.greeting();
p2.greeting();
&#13;
&#13;
&#13;

greeting或您可以在此处查看的实例中prototype的差异。当我更改一个对象的greeting属性时,它只会影响该对象。

&#13;
&#13;
function Person( name ){ 
   this.name = name;
   this.greeting = function() {
      alert( 'Hi I\'m ' + this.name + '.' );
   }
}

var p1 = new Person( 'Mr. X' );
var p2 = new Person( 'Mr. Y' );

p1.greeting = function() {};
p1.greeting();
p2.greeting();
&#13;
&#13;
&#13;