有没有办法在JavaScript中创建类似数组的对象,而不使用内置数组?我特别关注这样的行为:
var sup = new Array(5);
//sup.length here is 0
sup[0] = 'z3ero';
//sup.length here is 1
sup[1] = 'o3ne';
//sup.length here is 2
sup[4] = 'f3our';
//sup.length here is 5
Run Code Online (Sandbox Code Playgroud)
我在这里看到的特殊行为是sup.length更改而没有调用任何方法.我从这个问题中了解到,在数组的情况下,[]运算符会被重载,这就解释了这种行为.有没有一种纯粹的JavaScript方式来复制这种行为,或者语言是不是足够灵活?
根据Mozilla文档,正则表达式返回的值也可以用这个索引做一些时髦的事情.用普通的javascript可以实现吗?
当我发送http get请求时,我收到这些错误TypeError: Found non-callable @@iterator,但它Angular 7不在Angular 8.
我的组件文件
从component.ts文件中我调用了服务getCodes()
onSubmit(){
this.service.getCodes('localhost/Aggregator/getCodes').subscribe (result=>{
}, error =>{
console.log(error);
})
}
Run Code Online (Sandbox Code Playgroud)
我的拦截器文件
当我发送请求时,我已经通过拦截器传递了这些标头
@Injectable()
export class Interceptor implements HttpInterceptor {
sessionParam:any = {
userParam: {
'a':66,
'b':101,
'c':'0201',
'd':'Y',
'e':'Y',
'h':'2019/02/22',
'f':'Y',
'g':12
}
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let headers = new HttpHeaders();
for (var val in this.sessionParam) {
Object.keys(this.sessionParam[val]).forEach(key => {
headers = headers.append(key,this.sessionParam[val][key]);
});
}
request = …Run Code Online (Sandbox Code Playgroud) 我想向Array类添加一些函数(我宁愿不要将它们作为类外部的函数使用,因为理想情况.下,在对象后面键入时可以发现它们)。这是我到目前为止的内容:
export class List<T> extends Array<T> {
constructor(items?: Array<T>) {
super(...items)
Object.setPrototypeOf(this, List.prototype);
}
get first(): T {
return this[0]
}
}
Run Code Online (Sandbox Code Playgroud)
运行良好:
const list = new List([1,2,3]);
console.log(list.first)
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试运行此命令:
const list = new List([1,2,3]);
console.log(list.map(x=>x*2))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
super(...items)
^
TypeError: Found non-callable @@iterator
Run Code Online (Sandbox Code Playgroud)
理想情况下,我将获得一个对象,该对象等效于new List(this.map(x=>x*2))如何在无需重写Array的所有方法的情况下扩展Array类?
我希望一个类在new它返回时返回一个数组
class MyArray {
constructor(){
}
}
const myArray = new MyArray()
Array.isArray(myArray) // Should be true
Run Code Online (Sandbox Code Playgroud)
我以前用这种方式写它:
class MyArray {
constructor(){
const arry = new Array()
return arry
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我在Typescript中编写时,返回值arry不是MyArray的类型,因此它会提示错误.
如何解决这个问题?