JS笔记 继承篇1

组合继承

在ES6之前并没有提供extends继承。我们使用构造函数+原型对象的方式实现继承

// 构造函数继承
function Father(name,age) {
  this.name = name;
  this.age = age;
}
//共有的方法写到Father的原型对象上,
//这里有人会问为什么不直接写到father的构造器中呢,同样可以继承到father的方法
//确实可以,但是当你有new了很多个儿子的时候,而father中有很多个方法,
//这时候,js就会重新编译多次相同的方法,造成了内存的浪费,
//而写到原型对象上,无数的儿子就会通过father的实例去father的原型对象上找到方法(有关知识参考原型链)
Father.prototype.lastName = function() {
  console.log('my lastName is 陈');
}

Son.prototype = new Father(); //将Son的原型对象指向father的实例
Son.prototype.constructor = Son; //同时要将Son的构造函数指回自己

function Son(name,age){
  Father.call(this,name,age); //利用call调用father的构造函数,this 指向了子构造函数的实例 
}

const son = new Son('陈平安','15');
son.lastName(); //可以调用父方法;

//自己的方法写到自己的原型对象上
Son.prototype.firstName = function() {
  console.log('my firstName is 平安');
}
son.firstName();
console.log(son);

代码执行结果
JS笔记 继承篇1_第1张图片

你可能感兴趣的:(JS)