求大佬看看这个问题

function _new() {
    let newObj = {};  
    let Constructor = Array.prototype.shift.call(arguments);
    //这里为什么不能直接 let Constructor = arguments[0]呢?
    newObj.__proto__ = Constructor.prototype;
    Constructor.apply(newObj, arguments);
    return newObj;
}
阅读 1.6k
2 个回答
shift() 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。

这里的目的是取第一个参数作为构造函数,然后后面参数作为构造参数。

如果你直接取第一个参数,就会把构造函数也作为构造函数的参数扔进去,所有不能直接取。

在你调用的时候 _new(Object, a, b, c)
var Object = function(a, b, c) {};
Object是你的原型,后面是你构造函数的参数,所以arguments要把第一个排除掉,不需要再原型

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题