用一个function实现 JavaScript中的 new 关
2017-09-11 本文已影响0人
Gary嘉骏
代码
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”,即可领红包。谢谢支持