参考网址:https://www.jianshu.com/p/f8c7c55025fc
1.理解字面量,构造函数,构造函数实例的关系。
//只有构造函数有原型属性 - prototype,它是一个对象 // 1.字面量对象 var A = {}; console.log(A.prototype); // undefined // 2.构造函数 var B = function (name) { this.name = name; } console.log(B.prototype); // {constructor: ƒ} console.log(typeof B.prototype); // object // 3.构造函数实例 var b = new B('top'); console.log(b.prototype); // undefined //原型对象中有个constructor属性,constructor指向构造函数本身,也只有原型对象具有constructor属性 console.log(B.prototype.constructor === B); // true console.log(b.constructor === B); // true //所有的对象都有 __protp__属性,它也是个对象 console.log(B.__proto__); // ƒ () { [native code] } console.log(b.__proto__ === B.prototype); // true console.log(a.__proto__ === Object.prototype); // true
2.理解原型链
原型链的核心就是当自身不存在的属性时,依赖对象的_proto_的指向,就一层层的扒出创建对象的构造函数,直至到Object时,就没有_proto_指向了。
console.log(Object.prototype.__proto__); // null
下图为原型链查找流程图