不带括号的短格式调用方法?



例如,我编写以下代码:

const a = [1,2,3,4,5]
const res = a.slice.call(a)
console.log(res)

为什么切片不带括号?因为它是返回值,是吗? 还是我错了?

为什么我不能然后写这样的代码:

const a = [1,2,3,4,5]
const res = a.slice(0, a.length).call(a)
console.log(res)

问题出在哪里?

来自文档,

call(( 方法调用具有给定此值的函数,并且 单独提供的参数。

a.slice是一个函数,函数具有调用slice函数的调用method

const a = [1,2,3,4,5]
const b = [1,2];
const res = a.slice.call(b) // calls the function with context of b
console.log(res); // [1,2]

另一方面,a.slice(0, a.length)返回一个数组,而数组没有call函数,这将导致错误。

a.slice是一个引用Array.prototype.slice的函数。函数在其原型上也有函数,包括call- 就像你可以在a引用数组的地方做a.slice()一样,你可以在fn引用函数的地方做fn.call()

但是在第二个示例中,您尝试在数组而不是函数上使用calla.slice(0, a.length)解析为数组,并且Array原型没有call方法。只能对具有call属性的对象(包括函数(或在其原型对象之一上具有call属性的对象(包括函数(使用call

a.slice.call(a)调用slice方法,a作为上下文。call

call(( 方法调用具有给定此值和单独提供的参数的函数。

顺便说一下,这与执行操作相同:

a.slice().

const a = [1,2,3,4,5]
console.log(a.slice.call(a));
console.log(a.slice());

请参阅代码段。两个结果是相同的。

后一个示例执行:

a.slice(0, a.length).call(a)

这是在slice的结果上调用call,这是一个数组。call是一种FunctionArray的方法,所以这不起作用。

相关内容

  • 没有找到相关文章

最新更新