我有一个班级
function Thing (n) {
this.limit = n // null or int n
this.table = [1, 2, 3, 4]
}
我想为美学做这件事
Thing.prototype.test = function () {
let that = this;
return this.table
.slice(0, that.limit) // this line
.map() // etc
}
因为上面是简化的代码,实际的table
是另一个类的实例,并且在slice()之前有另一个实例方法和一个map()。
所以我想知道是否有办法强制切片切片到Thing.limit
(如果存在),否则切片并返回整个数组。 (在最后一个map()之前,数组可能很小)。像
Thing.prototype.test = function () {
let that = this;
return this.table
.slice(0, (that.limit == null) ? this.length : that.limit)
.map() // etc
}
这不起作用,我收到错误
ReferenceError: that is not defined
作为一个侧面问题,slice()中的this
上下文是什么?这是一个愚蠢的问题吗?
注意this.table.slice(0, -1) => [1, 2, 3]
和this.table.slice(0, 0) => []
。
我可以更改Thing.limit
的保存方式,而且这主要是因为我很好奇,因为我已经将功能更改为slice
this.plan.limit
存在&& > this.table.length。
实例化类的代码是
const gadget = new Gadget();
const query = new Thing(gadget);
const result = query.get();
可能相关:在实际代码中,在query.get()内部,还有一个名为getRowIds
的函数在slice()之前被调用,然后是一个非常基本的map()。< / p>
错误发生在slice()
行
答案 0 :(得分:1)
将undefined
与slice的第二个参数一起使用将为您提供所需的行为。如果由于某种原因你接受0作为限制,如果有一个空表是一个东西,那么你可以使用它。
function Thing (n) {
this.limit = n; // undefined or int
this.table = [1, 2, 3, 4]
}
Thing.prototype.test = function () {
return this.table
.slice(0, this.limit)
.map() // etc
}
现在小心实例,我看到你向Gadget
构造函数传递Thing
而不是数字的实例,所以这可能与你期望的行为不同。