每个函数都有 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()
- 借用构造函数继承
function SuperType () {
this.colors = ["red", "blue", "green"]
}
function SubType () {
// 继承了SuperType
SuperType.call(this)
// 只能继承构造函数上的属性
}
const subType = new SubType();
subType.colors
实现的本质:在子类构造函数的内部调用超类型构造函数,使用aapply()和call() 方法
注意:
1.函数复用性不高
2.只能继承实例上的属性,原型上的方法不可见