JavaScript 学习下原型

170 阅读1分钟

什么是原型?

原型是构造函数的一个属性,这个属性叫prototype

# 那原型有什么作用呢?

原型也就是prototype里面定义一些公用的属性或者方法,在通过new创建一个实例的时候这个实例会继承prototype的属性和方法

举个栗子

// 创建一个函数
function Person() {
    
}
Person.prototype.name = '我是Person的name'
// 实例一个对象
var p = new Person()

// 这时候实例p会继承Person的prototype内的属性和方法
p.name // 我是Person的name

上图看看效果

这时候实例p是没有定义name这个属性的,但是却显示出了name的值,这个值怎么来的呢,其实就是继承的Person.prototype上的

# 原型链

当输出p.name的时候,会先在实例p上去找这个name属性,如果没找到的话,就会通过一个proto这个属性里面去找,如果找不到的话,继续向里面的proto去找,直到找到,这个查找的链路叫做 原型链

有个疑问? 这时候的原型链是
1实例 p < Person < Function
2️实例 p < Person < Object < Function

# proto和prototype是什么关系

p.proto指向Person.prototype

# constructor的作用是什么

constructor存在于prototype中,指向的上级function的引用
比如
p.constructor -> ƒ Person() {} Person.constructor -> ƒ Function() { [native code] }