我正在阅读这篇文章,我不明白下面这行是做什么的。即使我去掉这一行,我也看不出有什么区别。
this.constructor.prototype.constructor.apply(this,Array.prototype.slice.call(arguments));
有人能解释一下为什么this.constructor.prototype.constructor
是必要的,this.constructor
不会返回相同的值吗?
基本上,它试图做的是调用对象的构造函数,即当前对象的原型。
分解:
-
this
-当前对象 -
this.constructor
-当前对象的constructor
属性,几乎可以肯定(但不一定!)继承自它的原型。因此,它可能(但不一定)是创建对象的函数。 -
this.constructor.prototype
-分配给该函数的prototype
属性的对象。(如果通过new
调用该函数,该对象将被分配为创建对象的底层原型) -
this.constructor.prototype.constructor
-创建对象的函数。
…然后我们调用apply
,将this
设置为当前的this
,并使用Array.prototype.slice
将当前参数复制为真数组。(最后一部分是不必要的,apply
接受任何数组,如,它不需要真正的数组。所以代码可以直接使用arguments
)