this.constructor.prototype.constructor.apply在js中的意思是什么

时间:2013-06-15 15:42:36

标签: javascript

我正在阅读this文章,我无法弄清楚下面这行是做什么的。即使我删除了这一行,我也看不出任何差异。

this.constructor.prototype.constructor.apply(this,Array.prototype.slice.call(arguments));

有人可以解释为什么this.constructor.prototype.constructor是必要的,不会this.constructor返回相同的值吗?

1 个答案:

答案 0 :(得分:5)

基本上,它要做的是为当前对象原型的对象调用构造函数。

打破它:

  • this - 当前对象
  • this.constructor - 当前对象上的constructor属性,几乎可以肯定(但不一定!)继承自其原型。因此,它可能(但不一定)是创建对象的函数。
  • this.constructor.prototype - 分配给该函数的prototype属性的对象。 (如果通过new调用该函数,将被指定为对象的基础原型的对象。)
  • this.constructor.prototype.constructor - 创建 对象的函数。

...然后我们在其上调用apply以在当前this的调用中设置this,并使用Array.prototype.slice制作当前的arguments副本参数作为真正的数组。 (最后一部分是不必要的,apply接受任何 array-like ,它不需要真正的数组。所以代码可以直接使用{{1}}。)