Cla*_*cks 7 javascript arrays slice
我正在编写一个脚本,我需要在许多不同的地方克隆数组.出于这个原因,我想执行以下操作来模拟克隆函数:
var clone = [].slice.call;
var arr1 = [1,2,3,4,5,6,7,8,9,10];
var arr2 = clone(arr1, 0);
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的代码导致: TypeError: object is not a function.我意识到有许多功能可以做深度克隆和浅拷贝,但我只是想使用内置方法.有趣的是,以下内容确实有效:
var clone = [].slice;
var arr1 = [1,2,3,4,5,6,7,8,9,10];
var arr2 = clone.call(arr1, 0);
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么第一个块不起作用而第二个块不起作用?有没有办法在调用引用函数时引用函数调用和应用函数而不抛出错误?
我必须绝对同意 Felix King 和 pimvdb 的观点。我认为使用 Function.protoytpe.bind() 函数的唯一缺点是,这不是一个在所有浏览器(例如 IE6)中都可用的函数。另一种方法是使用提供 curry() 函数的 JavaScript 库。另一种选择是定义一个函数,使您能够检索任何其他函数的调用函数。以下是我在博客上发布的一个函数的定义,我将其称为 getCall():
Function.prototype.getCall = function() {
var realFn = this;
return function(objThis) {
return realFn.apply(objThis, Array.prototype.slice.call(arguments, 1));
};
};
Run Code Online (Sandbox Code Playgroud)
现在,通过这个定义,您可以执行以下操作来获取对切片函数的调用函数的引用:
var slice = [].slice.getCall();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
470 次 |
| 最近记录: |