js原型链

129 阅读1分钟

在js原型链的学习过程中,总会有一些犯糊涂的地方,那么如何清晰的明白原型链的相关知识呢,首先我们我理解以下概念

prototype: 原型。指代函数的属性,是一个对象 {}
__proto__ 原型链。指代对象的属性,也是一个对象{}
对象的__proto__指向该构造函数的prototype 创建对象有三种模式:函数字面量 let a = {}、构造函数let a = new obj()、createlet a = object.create(),下面以构造函数方式简单举例

function Person(name) {
    console.log(name)
    this.name = name
}
Person.prototype.getName = function () {
    console.log(this.name)
}
var a = new Person('zhangsan')
a.getName()

根据如上解释:

a.__proto__ === Person.prototype  
Person.prototype.__proto__ === Object.prototype
Object.prototype.__proto__ === null		  
Person.__proto__ === Function.prototype

所以,一切皆对象。原型链就是对象通过__proto__去访问原型的属性,一直到object.prototype.
上面的function和object有什么区别呢

Function.__proto__ === Function.prototype //true
Object.__proto__ === Function.protoype  //true

所以底层的数据处理中Function是object的构造函数。

Object.__proto__ === Function.__proto__