javascript - 如何传递参数并应用于函数?

标签 javascript arguments pass-through

我有一个 Uint8Array,我想在其上使用 slice 方法。

所以我利用了这样的数组切片方法:

Array.prototype.slice.call(array, start, end);

现在我想外包一些像这样的常用功能。
我尝试过

var utils = {
   slice: function() {
     return Array.prototype.slice.apply(this, arguments);
   }
};

但显然我误解了它的真正工作原理。有人可以向我解释一下这一点以及如何实现它以开始工作吗?

最佳答案

你的问题在于this不是你想象的那样。如果您调用 utils.slice(foo, 1, 2)this 将是 utils

根据您想要如何调用它,您可以将要操作的对象作为第一个参数传递,然后您将执行以下操作:

var utils = {
   slice: function() {
     // The object we're operating on
     var self = arguments[0];
     // The rest of the arguments
     var args = Array.prototype.slice.call(arguments, 1);

     return Array.prototype.slice.apply(self, args);
   }
};

用法:

var someSlice = utils.slice(someArray, 2, 14);

另一个(也许更清晰)选项是仅使用命名参数:

var utils = {
    slice: function(array, from, to) {
        return Array.prototype.slice.call(array, from, to);
    }
};

这将以同样的方式工作。

更新:我很好奇为什么Uint8Array没有slice,并且我发现了subarray :

Int8Array subarray(
  long begin,
  optional long end
);

请注意

Note: Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.

这可能就是您想要的 - 我敢打赌它会更有效 - 如果您不需要复制数据,那就是!

关于javascript - 如何传递参数并应用于函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11561673/

相关文章:

java - 使用带通配符的通用 map 的问题

powershell - 有没有一种简单的方法可以将特定的 *named* PowerShell 参数直接传递给被调用的函数?

iis-7 - 传递身份验证不起作用。 IIS 7

javascript - 如何在js上设置消息间隔超时

javascript - 0x800a01bd - JavaScript 运行时错误 : Object doesn't support this action

python - 在 Python 3 中可以结合参数描述和类型提示吗?

javascript - 如何从 URL 数组中获取内容以响应 native

javascript - Angular 2,与谷歌地图事件一起使用的子组件丢失上下文

python - scikit-learn 中的“冗长”参数