Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这段javascript会给出不同的结果?_Javascript_Prototype_Call_Slice - Fatal编程技术网

为什么这段javascript会给出不同的结果?

为什么这段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);//`[]

为什么直接调用slice会给出空数组?如果我可以直接调用函数K,为什么我不能直接调用slice呢?

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)