javascript - JavaScript 上数组切片方法的奇怪行为

标签 javascript arrays oop methods slice

我发现数组在类中使用时有一个非常奇怪的行为...我一直试图弄清楚发生了什么,但我无法理解。所以这就是发生的事情。

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/

相关文章:

javascript - 如何在 react 中添加作用域的CSS?

javascript - Highcharts图表宽度动态显示大小

javascript - 点击事件监听器没有反应

arrays - 在 PSCustomObject 数组中查询具有最大值的行

java - 这种 O(n) 排序方法已经存在了吗?

Python简单纸牌游戏学习类(class)

javascript - 从 C++ 向网站发送数据

python 划分多维列表的最快方法

php - 将对象分配为值和引用在 PHP 中无法正常工作

c++ - 在 c++ asio 中,如何为 http 或 https 创建相同的套接字对象(接口(interface)/抽象问题?)