当前位置 : 主页 > 大数据 > 区块链 >

何时使用’Array.prototype’以及何时在JavaScript中使用’this’?

来源:互联网 收集:自由互联 发布时间:2021-06-22
让我们从The Good Parts一书中拿这个例子: Array.method('unshift', function () { this.splice.apply(this,[0,0].concat(Array.prototype.slice.apply(arguments))); return this;}); 为什么作者在一个地方使用this.splice而在另
让我们从The Good Parts一书中拿这个例子:

Array.method('unshift', function () {
    this.splice.apply(this,[0,0].concat(Array.prototype.slice.apply(arguments)));
    return this;
});

为什么作者在一个地方使用this.splice而在另一个地方使用Array.prototype.slice?

我尝试互相交换这个和Array.prototype并得到如下错误:

TypeError:无法读取未定义的属性“slice”

但我仍然不确定,如何知道何时应该使用这个或Array.prototype.

在第一次调用中,这指的是调用unshift的数组,因此它继承了Array.prototype的splice.

但是,在第二次调用中,代码对不是数组的东西使用切片(参数伪数组,没有切片方法).因此,在这种情况下,Crockford通过Array.prototype访问该方法.

从技术上讲,他本可以在第二个位置使用this.slice,如下所示:

Array.method('unshift', function () {
    this.splice.apply(this,[0,0].concat(this.slice.apply(arguments)));
    return this;
});

…但它可能会产生误导,因为第二次调用与此引用的当前数组无关.

网友评论