在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__