我发现数组在类中使用时有一个非常奇怪的行为...我一直试图弄清楚发生了什么,但我无法理解。所以这就是发生的事情。
class wtf{
constructor(){
this.array=[0,2,3];
this.fn=this.fn.bind(this);
}
fn(){
console.log(this.array.slice(0,this.length));// will print [0,2,3]
console.log(this.array.slice(0,this.length-1));// will print an empty array
}
}
const k=new wtf();
k.fn();
当我尝试使用 this.array.slice(0,this.length) 获取整个数组时,它工作得很好。它会给我完整的数组。但是当我尝试使用 this.array.slice(0,this.length-1) 来获取不包含最后一个元素的数组时,它会给我一个空数组而不是我想要的数组。似乎只有当它写在对象方法中时才会发生。因为它正常工作。
const array=[0,2,3];
console.log(array.slice(0,this.length-1)); // will print [0,2]
我尝试删除 bind
方法以查看这是否影响行为,但它仍然给我相同的结果...
有人可以解释为什么会发生这种情况吗?
最佳答案
你的代码错误,把this.array.length -1
this.length 未定义
从你的对话中我发现,你正在尝试继承 DOM Array
尝试像这样继承Array
class MyArray extends Array {
constructor(props){
super();
for(var i=0;i<arguments.length;i++) this.push(arguments[i]);
}
}
const k=new MyArray(5,6,7,8);
console.log(k.length);
关于javascript - JavaScript 上数组切片方法的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60983491/