参考:https://blog.csdn.net/yucihent/article/details/79424506
文章内的图是参考一个大神的 但是找不到链接了
__proto__属性指向取决于对象创建时的实现方式
方式一:字面量方式var a = {};
var A = function(){};
var a = new A();
var a1 = {};
var a2 = Object.create(a1);
这句话的理解可参考以下文章中的图
https://blog.csdn.net/qq_43553067/article/details/88075690
什么是原型链?
由于__proto__是任何对象都有的属性,而js万物皆对象,所以会形成一条__proto__链接起来的链条,递归访问__proto__必须最终到头,并且值是null
当js引擎查找对象的属性时,先查找对象本身是否存在属性。如果不存在,会在原型链(其构造函数的prototype)上查找
示例
var A = function(){}var a = new A();如图所示
- a.__proto__ ——> A.prototype(构造器function A 的原型对象) - a.__proto__.__proto__ ——> Object.prototype(构造器 function object的原型对象) - a.__proto__.__proto__.__proto__ ——> null示例:
Function.prototype.a = "a"; Object.prototype.b = "b"; function Person(){} console.log(Person); //function Person() var p = new Person(); console.log(p); //Person {} 对象 console.log(p.a); //undefined console.log(p.b); //b