原型 原型链 继承

每个函数都有 prototype 属性,除了 Function.prototype.bind(),该属性指向原型。

每个对象都有 proto 属性,指向了创建该对象的构造函数的原型。其实这个属性指向了 [[prototype]],但是 [[prototype]] 是内部属性,我们并不能访问到,所以使用 proto 来访问。

对象可以通过 proto 来寻找不属于该对象的属性,proto 将对象连接起来组成了原型链

1. 原型链的继承

function Student(name,age){
    this.name = name
}
Student.prototype.study = function(){
    console.log('学生的任务就是要好好学习')
}

function Person(gener){
    this.gener = gener;
}

let student = new Student('肖战');

Person.prototype = student ;
let person = new Person('男')
Person.prototype.eat = ()=>{
    console.log('人还要吃饭')
}

person.study()
person.eat()
  1. 借用构造函数继承
function SuperType () {
  this.colors = ["red", "blue", "green"]
}
function SubType () {
  // 继承了SuperType
  SuperType.call(this)
  // 只能继承构造函数上的属性
}
const subType = new SubType();
subType.colors

实现的本质:在子类构造函数的内部调用超类型构造函数,使用aapply()和call() 方法
注意:
1.函数复用性不高
2.只能继承实例上的属性,原型上的方法不可见

你可能感兴趣的:(原型 原型链 继承)