gpt4 book ai didi

javascript - Javascript 中的 Array.prototype.reverse 和 Array.reverse 有什么区别?

转载 作者:行者123 更新时间:2023-11-29 10:17:32 26 4
gpt4 key购买 nike

我的问题涉及将新方法添加到现有String 构造函数 的应用程序。在 Stoyan Stefanov 的 Object Oriented Program for Javascript 中,有一个使用 Array 构造函数的 .reverse() 方法为 String 构造函数创建一个的示例。 下面是示例:

String.prototype.reverse = function() {
return Array.prototype.reverse.apply(this.split('')).join('');
}

我以为Array的.reverse()方法直接属于Array的对象。事实上,当我尝试使用此语句执行第二段代码时:,

String.prototype.reverse = function() {
return Array.reverse.apply(this.split('')).join(''); //WITHOUT the .prototype
}

var rev = "karunesh".reverse(); //applying the code here

我在 Firebug 控制台中收到一条错误消息:“类型错误:调用函数 Array.reverse 时缺少参数 0”。这对我来说没有任何意义。

当然,如果我在 .prototype 中添加回来,它会工作得很好。

另外,如果我必须调用原型(prototype)来访问 Array 对象的 .reverse() 方法 那么我是不是这样必须为 Javascript 中的任何内置对象执行此操作?

提前感谢您的帮助!

最佳答案

Is it the case that I have to call upon prototype to access the .reverse() method from the Array object

没有。要访问对象上的方法,只需使用点符号访问它。你想做的很简单

return this.split('').reverse().join('');

这就是apply (或 call)做:

var arr = this.split('');
return arr.reverse.apply(arr).join('');

最后是 arr.reverse === Array.prototype.reverse 因为那是 Array 对象继承的地方。您不是在访问 Array 构造函数对象本身的 reverse 方法,而是访问所有 Array 实例 分享 - 通过他们的原型(prototype)。然而,您几乎不需要显式使用原型(prototype)对象,只有当您处理不是 Array 实例(不共享原型(prototype))的对象时,如 arguments对象或 NodeList

TypeError: missing argument 0 when calling function Array.reverse. That does not make any sense to me.

Array.reverse 是一个非标准的 Array generic method仅在 Firefox 中可用。它的目的是简化将 Array 原型(prototype)方法应用于其他对象的构造,并且它确实将类数组对象作为第一个参数。一个例子:

Array.reverse([0, 1]) // [1, 0]

相当于

Array.prototype.reverse.apply([0, 1]);

然而,你在做

Array.reverse.apply([…]/*, undefined*/)

它使用(不相关的)this value 的数组调用 Array.reverse 函数并且没有实参,等同于

Array.prototype.reverse.apply(undefined)

然后抛出正确的异常。

关于javascript - Javascript 中的 Array.prototype.reverse 和 Array.reverse 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18680163/

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