Heim > Fragen und Antworten > Hauptteil
new关键字的实现原理
1 2 3 4 5 6 7 8 9 10 11 12 |
|
函数内部的四句话都不是很明白,希望大神能够大显神威
大家讲道理2017-04-10 17:25:32
第一句:将_new
的参数列表转成数组类型。
第二句:从参数列表中弹出第一个参数赋给constructor
,同时args
保留剩余的参数作为构造函数的参数。
第三句:构造出context
对象,这个对象的原型是constructor.prototype
,这样一来context
就被挂到了正确的原型链上面。因为通常原型链上会定义“类”的方法,所以这一步用来实现方法的挂载。
第四句:这一步骤,实现了对构造函数内部代码的执行,通常是一些对象属性的初始化。例如this.name = name;
之类的。所以这一步用来实现属性的定义和初始化。
值得注意的一点是:return那句为什么会有个判断?为什么有可能返回context有可能返回result?
这是因为有些构造函数里面可能有return xxx
的语句。这种情况下,如果同时xxx是个对象的话,那么最终就返回result,否则就返回前面构造出来的context。这一点正是ECMAScript规范中new关键字的意义要求的。