js的继承实现的方式具体可以分为6种
以下面的构造函数为例
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sleep = function() {
console.log(this.name + "每天都要睡觉");
}
}
Person.prototype.run = function() {
console.log("天天做运动");
};
构造函数继承
-
实现方式:使用call等方法 是一个对象的this指向另一个对象 从而让其拥有这个对象属性和方法
-
缺点:无法继承父类原型上面的方法 对于子类不需要的方法 每次创建都会拥有 浪费内存
function Child(name) {
Person.call(this);
this.name = name;
}
var p1 = new Child("丽丽", 18);
console.log(p1);
console.log(p1.run());//报错
console.log(p1.sleep());
原型拷贝继承(混入式继承)
- 实现方式:使用for-in便利弗雷原型里面的所有属性,依次加入子类的原型中
- 缺点:原型中子类不需要的方法或者属性也继承过来了 占用空间
function Child(name) {
this.name = name;
}
Child.prototype = new Person();
var c1 = new Child("杨洋");
console.log(c1.run());//天天做运动
console.log(c1.sleep());
原型链继承
- 实现方式:利用原型链来实现继承 父类的一个实例化对象作为子类的原型
- 缺点:子类实例和父类实例的原型对象上有成员共享的问题