美文网首页
用一个function实现 JavaScript中的 new 关

用一个function实现 JavaScript中的 new 关

作者: Gary嘉骏 | 来源:发表于2017-09-11 12:51 被阅读0次

代码

function _new(){
  if(arguments.length === 0 ) throw new Error('no arguments');
  target = Array.prototype.shift.call(arguments);
  if(!(target instanceof Function)) throw new Error('Uncaught TypeError: '+ target + ' is not a constructor(…)');
  var self= {};
  target.apply(self, arguments);
  if (target.prototype instanceof Object) {
    self.__proto__ = target.prototype;
  };
  return self;
};
var hh = _new(hi,6,7);
var hh0 = _new(hi,3);
console.log(hh0);
console.log(hh);
console.log(hh instanceof hi) // true;

简单解析

  • 首先拿到第一个参数,判断是否是一个能作为构造器使用的Function 对象
  • 新建一个self的空对象
  • 用self去调用构造器target
  • 把target.prototype 赋值给 self (先判断target.prototype 是否为对象)
  • 返回self

Done

如果觉得文章对你有点用的话,麻烦拿出手机,这里有一个你我都有的小福利(每天一次): 打开支付宝首页搜索“8601304”,即可领红包。谢谢支持

相关文章

网友评论

      本文标题:用一个function实现 JavaScript中的 new 关

      本文链接:https://www.haomeiwen.com/subject/mgzxsxtx.html