粗略的实现Array的功能
interface MyArray<T> {
[key: number]: T
}
class MyArray<T> {
constructor() {
// Object.defineProperties(this, {
// length: {
// enumerable: false
// }
// });
// @ts-ignore
Object.defineProperties(this.__proto__, {
push: {
enumerable: false
},
from: {
enumerable: false
}
});
}
[Symbol.iterator](){
let i = 0;
let len = this.length;
return {
next: () => {
return { value: this[i], done: i++ >= len };
}
}
}
/**
* push
*/
public push(val: T) {
this[this.length] = val;
}
/**
* from
*/
public from(val: T[]) {
for(let i = 0; i < this.length; i++) {
delete this[i];
}
for(let i =0;i< val.length; i++) {
this[i] = val[i];
}
}
get length() {
console.log('----')
let i = 0;
for(let key in this) {
i++;
}
return i;
}
set length(_: any) {
}
}
let arr = new MyArray();
arr[0] = '123';
arr[1] = '456';
arr.push('678');
console.log(arr);
console.log(arr.length);
for(let item of arr) {
console.log('-----1')
console.log(item)
}
for(let item of arr) {
console.log('-----1')
console.log(item)
}
for(let key in arr) {
console.log('key:',key);
}
arr.from(['a', 'b','c'])