此示例中存在哪种类型的继承(除了原型)

时间:2018-03-14 06:16:59

标签: javascript html inheritance prototypal-inheritance

我在javaScript中做了以下示例。有一个构造函数,我从中创建一个实例。现在,这个实例直接从构造函数(printName)获取1个方法,并通过构造函数原型(printAge)获取一个方法。

我可以得出结论, printAge 可以通过原型继承来调用,但 printName 代表任何类型的继承(因为它自动获取新创建的实例,是经典继承还是其他任何东西?)。

<html> 
<head></head>
<body>

<script>

var person = function(name, age){
this.name = name;
this.age = age; 
this.printName = function(){
    alert(this.name);
}
}
person.prototype.printAge = function(){
alert(this.age);
}

var person1 = new person("Jack", 29); 
person1.printName();
person1.printAge();

</script>

</body>
</html> 

因为,新实例已创建,它从构造函数获取 printName 。它代表任何类型的继承吗?

1 个答案:

答案 0 :(得分:1)

不,printName与继承无关。当您通过person函数构造函数创建对象时,每个对象都会获得自己的printName prpoerty副本,这是一个函数。当我为一个对象更改该属性时,对于其他属性,它将不会被更改。

&#13;
&#13;
var person = function(name, age){
   this.name = name;
   this.age = age; 
   this.printName = function() {
       alert(this.name);
   }
};

person.prototype.printAge = function() {
   alert(this.age);
};

var person1 = new person("Jack", 29); 
var person2 = new person("Alex", 30); 
person1.printName = function() { console.log('Changed !!!'); };

person1.printName();
person2.printName();
&#13;
&#13;
&#13;

所以它只是一个涉及函数的属性。类似的属性名称为age,但age包含原始值。