Mảng con JavaScript

Xin lưu ý một điều rất thú vị. Các phương thức tích hợp sẵn như

arr.constructor === PowerArray
6,
arr.constructor === PowerArray
7 và các phương thức khác – trả về các đối tượng mới thuộc loại chính xác được kế thừa
arr.constructor === PowerArray
8. Việc triển khai nội bộ của họ sử dụng thuộc tính
arr.constructor === PowerArray
9 của đối tượng cho điều đó

Trong ví dụ trên,

arr.constructor === PowerArray

Khi

arr.constructor === PowerArray
0 được gọi, bên trong nó sẽ tạo mảng kết quả mới bằng cách sử dụng chính xác
arr.constructor === PowerArray
0, không phải
arr.constructor === PowerArray
1 cơ bản. Điều đó thực sự rất tuyệt, bởi vì chúng ta có thể tiếp tục sử dụng các phương pháp
arr.constructor === PowerArray
8 cho kết quả

Hơn nữa, chúng ta có thể tùy chỉnh hành vi đó

Chúng ta có thể thêm một bộ thu tĩnh đặc biệt

arr.constructor === PowerArray
3 vào lớp. Nếu nó tồn tại, nó sẽ trả về hàm tạo mà JavaScript sẽ sử dụng nội bộ để tạo các thực thể mới trong
arr.constructor === PowerArray
7,
arr.constructor === PowerArray
6, v.v.

Nếu chúng ta muốn các phương thức tích hợp sẵn như

arr.constructor === PowerArray
7 hoặc
arr.constructor === PowerArray
6 trả về các mảng thông thường, chúng ta có thể trả về
arr.constructor === PowerArray
1 trong
arr.constructor === PowerArray
3, như ở đây

class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function

Như bạn có thể thấy, bây giờ

class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
0 trả về
arr.constructor === PowerArray
1. Vì vậy, chức năng mở rộng không được thông qua nữa

Các bộ sưu tập khác hoạt động tương tự

Các bộ sưu tập khác, chẳng hạn như

class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
2 và
class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
3, hoạt động giống nhau. Họ cũng sử dụng
arr.constructor === PowerArray
3

Các đối tượng tích hợp có các phương thức tĩnh của riêng chúng, ví dụ:

class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
5,
class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
6, v.v.

Như chúng ta đã biết, các lớp bản địa mở rộng lẫn nhau. Chẳng hạn,

arr.constructor === PowerArray
1 kéo dài
class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
8

Thông thường, khi một lớp mở rộng một lớp khác, cả phương thức tĩnh và không tĩnh đều được kế thừa. Điều đó đã được giải thích cặn kẽ trong bài viết

Nhưng các lớp tích hợp là một ngoại lệ. Họ không kế thừa thống kê từ nhau

Ví dụ: cả

arr.constructor === PowerArray
1 và
arr.constructor === PowerArray
80 đều kế thừa từ
class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
8, vì vậy các thể hiện của chúng có các phương thức từ
arr.constructor === PowerArray
82. Nhưng
arr.constructor === PowerArray
83 không tham chiếu đến
class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
8, vì vậy, chẳng hạn, không có phương thức tĩnh
arr.constructor === PowerArray
85 (hoặc
arr.constructor === PowerArray
86)

Đây là cấu trúc hình ảnh cho

arr.constructor === PowerArray
80 và
class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
8

Như bạn có thể thấy, không có liên kết nào giữa

arr.constructor === PowerArray
80 và
class PowerArray extends Array {
  isEmpty() {
    return this.length === 0;
  }

  // built-in methods will use this as the constructor
  static get [Symbol.species]() {
    return Array;
  }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

// filter creates new array using arr.constructor[Symbol.species] as constructor
let filteredArr = arr.filter(item => item >= 10);

// filteredArr is not PowerArray, but Array
alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function
8. Họ độc lập, chỉ có
arr.constructor === PowerArray
11 thừa hưởng từ
arr.constructor === PowerArray
82

Đó là sự khác biệt quan trọng về tính kế thừa giữa các đối tượng dựng sẵn so với những gì chúng ta nhận được với

arr.constructor === PowerArray
13

Làm cách nào để tạo một lớp con JavaScript?

Để tạo một lớp con, chúng ta cần sử dụng từ khóa 'extends' , từ khóa này cho phép chúng ta sao chép lớp cha vào lớp mới . Đây là nơi lớp mới của chúng ta sẽ kế thừa mọi thứ từ lớp cha.

Làm cách nào để sử dụng lớp con trong JavaScript?

Phân lớp là một thuật ngữ đề cập đến kế thừa các thuộc tính cho một đối tượng mới từ một đối tượng cơ sở hoặc lớp cha . Trong lập trình hướng đối tượng truyền thống, một lớp B có thể mở rộng một lớp A khác. Ở đây chúng ta coi A là lớp cha và B là lớp con của A. Như vậy, tất cả các phiên bản của B đều kế thừa các phương thức từ A.

Làm cách nào để gọi mảng đa chiều trong JavaScript?

Mảng đa chiều không được cung cấp trực tiếp trong JavaScript. Nếu chúng ta muốn sử dụng bất cứ thứ gì hoạt động như một mảng nhiều chiều thì chúng ta cần phải tạo một mảng nhiều chiều bằng cách sử dụng một mảng một chiều khác . Vì vậy, mảng nhiều chiều trong JavaScript được gọi là mảng bên trong mảng khác.

Làm cách nào để khai báo mảng của mảng trong JavaScript?

Tạo mảng . cú pháp. const tên_mảng = [mục1,mục2,. ]; Thông thường khai báo mảng với từ khóa const.