实现方法
function _new(fn, ...arg) { const obj = Object.create(fn.prototype); const ret = fn.apply(obj, arg); return ret instanceof Object ? ret : obj; }
关于为什么最后要判断 return ret instanceof Object ? ret : obj
instanceof Object 来判断是否是对象,包含Array,Object,Function、RegExp、Date
构造函数是可以自己指定返回一个对象的
例如下面代码:
function _new(fn, ...arg) { const obj = Object.create(fn.prototype); const ret = fn.apply(obj, arg); //return ret instanceof Object ? ret : obj; return obj; } function A(d) { this.d = d; return { a: 6 }; } console.log(new A(123)); //{a: 6} console.log(_new(A, 123)); //A {d: 123}
原创文章,作者:犀牛前端部落,如若转载,请注明出处:https://www.pipipi.net/2756.html