为什么这段javascript会给出不同的结果?
为什么直接调用slice会给出空数组?如果我可以直接调用函数K,为什么我不能直接调用slice呢?为什么这段javascript会给出不同的结果?,javascript,prototype,call,slice,Javascript,Prototype,Call,Slice,为什么直接调用slice会给出空数组?如果我可以直接调用函数K,为什么我不能直接调用slice呢?Array.prototype.slice(参数,1)似乎在调用Array.prototype上的.slice() 看, arr.slice([begin[,end]]) 参数 开始 从零开始提取的索引。作为负指数,, “开始”表示与序列末尾的偏移。切片(-2) 提取序列中的最后两个元素。如果省略begin, 切片从索引0开始 console.log(Array.prototype);//`[]
Array.prototype.slice(参数,1)
似乎在调用Array.prototype上的.slice()
看,
arr.slice([begin[,end]])
参数
开始
从零开始提取的索引。作为负指数,,
“开始”表示与序列末尾的偏移。切片(-2)
提取序列中的最后两个元素。如果省略begin,
切片从索引0开始
console.log(Array.prototype);//`[]`
console.log(Array.prototype.slice());//`[]`
log(Array.prototype.slice([10,20,30,40],1));//`[]`
console.log(Array.prototype.slice.call([10,20,30,40],1));//`[20, 30, 40]`
console.log([].slice([10,20,30,40],1));//`[]`
console.log([].slice.call([10,20,30,40,1]);//`[20,30,40]`
Array.prototype.slice(参数,1)
似乎正在调用Array.prototype上的.slice()
看,
arr.slice([begin[,end]])
参数
开始
从零开始提取的索引。作为负指数,,
“开始”表示与序列末尾的偏移。切片(-2)
提取序列中的最后两个元素。如果省略begin,
切片从索引0开始
console.log(Array.prototype);//`[]`
console.log(Array.prototype.slice());//`[]`
log(Array.prototype.slice([10,20,30,40],1));//`[]`
console.log(Array.prototype.slice.call([10,20,30,40],1));//`[20, 30, 40]`
console.log([].slice([10,20,30,40],1));//`[]`
console.log([].slice.call([10,20,30,40,1]);//`[20,30,40]`
Array.prototype.slice(参数,1)
似乎正在调用Array.prototype上的.slice()
看,
arr.slice([begin[,end]])
参数
开始
从零开始提取的索引。作为负指数,,
“开始”表示与序列末尾的偏移。切片(-2)
提取序列中的最后两个元素。如果省略begin,
切片从索引0开始
console.log(Array.prototype);//`[]`
console.log(Array.prototype.slice());//`[]`
log(Array.prototype.slice([10,20,30,40],1));//`[]`
console.log(Array.prototype.slice.call([10,20,30,40],1));//`[20, 30, 40]`
console.log([].slice([10,20,30,40],1));//`[]`
console.log([].slice.call([10,20,30,40,1]);//`[20,30,40]`
Array.prototype.slice(参数,1)
似乎正在调用Array.prototype上的.slice()
看,
arr.slice([begin[,end]])
参数
开始
从零开始提取的索引。作为负指数,,
“开始”表示与序列末尾的偏移。切片(-2)
提取序列中的最后两个元素。如果省略begin,
切片从索引0开始
console.log(Array.prototype);//`[]`
console.log(Array.prototype.slice());//`[]`
log(Array.prototype.slice([10,20,30,40],1));//`[]`
console.log(Array.prototype.slice.call([10,20,30,40],1));//`[20, 30, 40]`
console.log([].slice([10,20,30,40],1));//`[]`
console.log([].slice.call([10,20,30,40,1]);//`[20,30,40]`
当您直接调用函数时,它会得到不同的上下文。作为方法调用时,上下文是参数
数组,但直接调用时,上下文将是数组.prototype
对象
第二个调用不会尝试从参数
数组中获取项,它将尝试从数组中获取项。prototype
数组(充当空数组),使用参数
作为第一个索引,使用1
作为长度。直接调用函数时,它会获得不同的上下文。作为方法调用时,上下文是参数
数组,但直接调用时,上下文将是数组.prototype
对象
第二个调用不会尝试从参数
数组中获取项,它将尝试从数组中获取项。prototype
数组(充当空数组),使用参数
作为第一个索引,使用1
作为长度。直接调用函数时,它会获得不同的上下文。作为方法调用时,上下文是参数
数组,但直接调用时,上下文将是数组.prototype
对象
第二个调用不会尝试从参数
数组中获取项,它将尝试从数组中获取项。prototype
数组(充当空数组),使用参数
作为第一个索引,使用1
作为长度。直接调用函数时,它会获得不同的上下文。作为方法调用时,上下文是参数
数组,但直接调用时,上下文将是数组.prototype
对象
第二个调用不会尝试从参数
数组中获取项,它将尝试从数组中获取项。prototype
数组(充当空数组),使用参数
作为第一个索引,1
作为长度。请参阅调用H.prototype.K(…)
,看来您还不了解如何使用原型继承的一些基础知识。这应该很少做到。这可能有助于您更好地理解执行此操作的原因。Array.prototype.slice(参数,1)
相当于Array.prototype.slice.call(Array.prototype,参数,1)
。请注意,呼叫
始终为ac
function H() {
}
H.prototype.K = function() {
console.log(Array.prototype.slice.call(arguments, 1)); //gives [20, 30, 40]
console.log(Array.prototype.slice(arguments, 1)); //gives []
}
H.prototype.K(10, 20, 30, 40)