js中继承一

1,子类的原型对象——类式继承
//类式继承
//声明父类
function SuperClass() {
this.superValue = true;
}
//为父类添加共有方法
SuperClass.prototype.getSuperValue = function() {
return this.superValue;
};
//声明子类
function SubClass() {
this.subValue = false;
}
//继承父类
SubClass.prototype = new SuperClass();
//为子类添加共有方法
SubClass.prototype.getSubValue = function() {
return this.subValue;
}
类式继承:声明两个类,第一个类的实例赋值给第二个类的原型。
2,创建即继承——构造函数式继承
//构造函数式继承
//声明父类
function SuperClass(id) {
//引用类型共有属性
this.book = ['javascript', 'html', 'css'];
//值类型共有属性
this.id = id;
}
//父类声明原型方法
SuperClass.prototype.showBooks = function() {
console.log(this.books);
}
//声明子类
function SubClass(id) {
//继承父类
SuperClass.call(this, id);
}
//创建第一个子类的实例
var instance1 = new SubClass(10);
//创建第二个子类的实例
var instance2 = new SubClass(11);
SuperClass.call(this, id);这条语句是构造函数式继承的精华,由于call这个方法可以更改函数的作用环境,因此在子类中,对SuperClass调用这个方法就是将子类中的变量在父类中执行一遍,由于父类中是给this绑定属性的,因此子类自然也就继承了父类的共有属性。由于这种类型的继承没有涉及原型prototype, 所以父类的原型方法自然不会被子类继承,而如果想要被子类继承就必须要放在构造函数中,这样创建出来的每个实例都会单独拥有一份而不会复用,这样就违背了代码复用的原则。

你可能感兴趣的:(js中继承一)