继承含义:通过某种方式,让一个对象能够访问并使用另一个对象中的内容
继承作用:节省了构造函数中大量重复声明的属性和方法,提高了开发效率;节省了内存空间,提高了性能。
1、原型链继承:
将父类的实例化对象赋值给子类的原型
所以,父类所有的属性和方法都可以被所有子类共享
重点:让新实例的原型等于父类的实例。
特点:构造函数和原型中的所有数据都可以获取。
实例可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性。(新实例不会继承父类实例的属性!)
缺点:
(1)新实例无法向父类构造函数传参。原型链继承自身没有办法传参
(2)继承单一。
(3)所有新实例都会共享父类实例的属性。(原型上的属性是共享的,一个实例修改了原型属性,另一个实例的原型属性也会被修改!)
<script>
//父类
function Person(name,age){
this.name = name;
this.age = age;
}
//实例化父类
let person = new Person();
// 下面父类实例person的属性,子类不会继承
person.name = "tom";
person.age = 20;
//添加父类原型对象的方法
//直接给原型赋值一个对象,可以简化批量赋值。等于重构了原型
//重构原型时,需要手动创建constructor: 构造函数。 否则原型的指向链条会断
Person.prototype = {
constructor:Person,
run : function(){
console.log("跑步");
}
//子类
function Child(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
Child.prototype = new Person(); //继承父类
let