首页 > new关键字的底层实现原理

new关键字的底层实现原理

new关键字的实现原理


function _new(/* constructor, param, ... */) {
  var args = [].slice.call(arguments);
  var constructor = args.shift();
  var context = Object.create(constructor.prototype);
  var result = constructor.apply(context, args);
  return (typeof result === 'object' && result != null) ? result : context;
}

var actor = _new(Person, "张三", 28);

函数内部的四句话都不是很明白,希望大神能够大显神威


值得注意的一点是:return那句为什么会有个判断?为什么有可能返回context有可能返回result?

这是因为有些构造函数里面可能有return xxx的语句。这种情况下,如果同时xxx是个对象的话,那么最终就返回result,否则就返回前面构造出来的context。这一点正是ECMAScript规范中new关键字的意义要求的。

【热门文章】
【热门文章】