原型和原型链


  • prototype就是原型(称为显示原型),原型与原型通过__proto__(称为隐式原型)层层相链接的过程即为原型链。原型的作用,就是共享方法。
  • Js内置的StringNumberBooleanRegExpDateArrayObjectFunctionError本质都是函数。
  • 只有函数才具有显式原型prototype

原型查找方式,如查找obj的dance方法

function Star(name) {
    this.name = name
    // 1、首先看obj对象身上是否有dance方法,如果有,则执行对象身上的方法
    this.dance = function () {
        console.log(this.name + '1')
    }
}
// 2、如果没有dance方法,就去构造函数(就是自己)原型对象prototype身上去查找dance这个方法
Star.prototype.dance = function () {
    console.log(this.name + '2')
}
// 3、如果再没有dance方法,就去Object原型对象prototype身上去查找dance这个方法
Object.prototype.dance = function () {
    console.log(this.name + '3')
}
// 4、如果再没有,则会报错
let obj = new Star('小红')
obj.dance()

继承待补充

// function Foo(){}
// function Ani(){}
// Foo.prototype.eat = function(){
//     console.log('====AAA')
// }
// Ani.eat()