gpt4 book ai didi

javascript - 原型(prototype)制作 "arguments"

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:36:06 27 4
gpt4 key购买 nike

<分区>

简介

我们都知道 JavaScript 函数的这些愚蠢的 arguments 对象。

But why object? Isn't it an array?

不,不是,这就是为什么很多人称它为 JavaScript 概念的失败:

(function () {
return arguments.slice(); // TypeError: arguments.slice is not a function
}());

意图

好的,这只是我想问的真实问题的介绍,但在问之前你需要更多信息:

这几天看不同的代码,在很多地方看到下面这行代码,吓坏了。

args = Array.prototype.slice(arguments);

那么,它的作用是简单地将 arguments 对象“转换”为一个包含其所有原型(prototype)和内容的数组。


我的解决方案

我的想法如下:虽然 JavaScript 完全是关于原型(prototype)设计的,但我们为什么不扩展 arguments 对象的 prototype 本身呢?我检查了一些网站的现有脚本,但没有找到我想要找到的东西,最后我自己写了:

(function () {
var i, methods;

arguments.constructor.prototype = Array.prototype;
methods = ['concat', 'join', 'pop', 'push', 'reverse', 'shift', 'slice', 'sort', 'splice', 'toString', 'unshift'];

for (i = 0; i < methods.length; i += 1) {
if (arguments.constructor.prototype.hasOwnProperty(methods[i]) === false) {
arguments.constructor.prototype[methods[i]] = Array.prototype[methods[i]];
}
}
}());

压缩后它只需要 260 字节,并使用 Array.prototype 扩展 arguments 对象的 prototype

所以我终于可以像处理“真实”数组一样处理arguments 对象了。


问题

在检查了最著名的 JavaScript 框架之后,我完成了以下内容:没有人使用这样的构造并扩展了 arguments 对象的 prototype

但是为什么?我现在没有想到有什么问题吗?

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com