【发布时间】:2017-04-29 23:04:36
【问题描述】:
我有课
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()。
错误发生在slice() 行
【问题讨论】:
-
你能展示将 Thing 类实例化为变量的代码吗?因为我看不出为什么它会用你在这里发布的代码抛出这个错误。
-
是的,会马上添加的
-
另外,你不需要使用
that,因为你在同一个范围内。如果你在 map 函数中需要它,你可以为它提供一个上下文作为第二个参数。 -
哦,我很抱歉,我把这个/那个弄混了,你是对的。代码有效。如果您添加答案,我会接受! (实际的限制属性是关闭的“this.plan”,我会在我的代码中设置
that = this.plan,并弄乱了切片中的代码。)
标签: javascript slice