Ste*_*dge 8 javascript prototype-programming
我正在阅读JS Function的arguments变量的MDN页面:
https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments
我知道参数不是数组,所以这不起作用:
var a = arguments.slice();
Run Code Online (Sandbox Code Playgroud)
MDN上的解决方案是这样做的:
var args = Array.prototype.slice.call(arguments);
Run Code Online (Sandbox Code Playgroud)
为什么使用Array.prototype而不仅仅是Array.slice.call(arguments)?在这里使用原型显着吗?
为什么使用Array.prototype而不仅仅是Array.slice.call(arguments)?
该Array.slice方法是Array和String Generics的一部分,这是一组作为和构造函数的属性实现的"静态"方法.ArrayString
这些方法是非标准的,它们仅在基于Mozilla的实现中可用.
我已经看到这些方法和标准方法之间存在很多混淆,但是如果你测试的话,你应该知道它们不一样.
Array.slice === Array.prototype.slice; // false
Run Code Online (Sandbox Code Playgroud)
你会发现它们是不同的方法.
顺便说一句,如果您使用该方法,则不需要使用该call方法,第一个参数是将用作thisvalue(Array.slice(arguments))的对象.
在这里使用原型显着吗?
是的,Array构造函数只是一个函数,标准slice方法,以及所有其他"数组方法"的定义Array.prototype.
此对象Array.prototype是所有Array对象实例继承的对象.
正如@Pointy所说,您可以使用Array实例获取对该方法的引用:
[].slice === Array.prototype.slice; // true
Run Code Online (Sandbox Code Playgroud)
理论上,这将创建一个新的Array对象,并slice在原型链中访问该方法,但我记得有些实现正在开始优化这种属性访问,避免创建一次性对象,所以,在某些这一点,在性能方面也是完全相同的.
| 归档时间: |
|
| 查看次数: |
1342 次 |
| 最近记录: |