new的过程,以及__proto__与prototype的关系

原创 lingwer111 随笔 JavaScript 310阅读 2017-05-03 01:06:37 举报

说起new,要先说原型链。
机制就是指对象的一个内部链接引用另外一个对象。
如果在第一个对象上没有找到需要的属性或者方法的引用,引擎就会继续在[[prototype]]关联的对象上继续查找,同理,如果后者中也没有找到需要的引用就会继续查找他的[[prototype]].以此类推,这一系列对象的链接被称为“原型链”。
来看看我们再熟悉不过的代码,通过new运算符从构造器中得到一个对象。
javascript 代码

下面,通过这段代码来理解new运算的过程
javascript 代码

上面实现的objectFactory函数和new 产生一样的结果。
代码中,使用了obj.proto = Constructor.prototype;来改变obj原型的指向。
刚好前一段时间看到知乎一篇关于 2017阿里和腾讯前端实习的题目,第一个问题就是 prototype和proto的关系是什么。所以查找了一下,总结如下。

每个对象都会在其内部初始化一个属性proto。又回到了开头的那句话,当我们访问一个对象的属性时。如果没有找到,就通过这个内部链接proto引用另外一个对象继续找。
如果没有找到,引擎就会继续在proto关联的对象上通过他的proto继续查找,一直到根对象object为止,这一系列对象的链接被称为“原型链”。
proto就是用来记录链接的内部私有属性。这是原型链的本质,而prototype是一个开发接口

而new的步骤,也是创建一个obj,并把obj的proto指向要继承对象的原型(Constructor.prototype即Person.prototype)。并返回obj,实现了new。

参考:《JavaScript 设计模式与开发实践》
http://rockyuse.iteye.com/blog/1426510

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复