关于SO的第一个问题,我希望我没有重复任何东西;我已经看了其他问题,认为我的问题足够不同,值得问。
基本上,有没有一种方法可以将使用速记符号编写的方法体中的this
设置为词法形式或绑定到特定值?
之所以这样做,是因为我在实现迭代器协议时希望使用ES6方法速记,在该协议中,@@iterator
方法在调用时返回迭代器对象。迭代器对象必须有一个next()
方法,当调用该方法时,该方法本身返回另一个对象。在第二个对象中,我希望引用原始(在我的例子中是,Graph
)html" target="_blank">实例。
请注意,在下面的代码片段中,由于this
绑定而无法正常工作,Next()
使用的是ES6方法定义的速记。
class Graph {
constructor(initialNodes) {
this.data = [...initialNodes];
}
[Symbol.iterator]() {
let nextIndex = 0;
// `this` binding is fine here, as expected
return {
// look at that beautiful shorthand
next() {
return nextIndex < this.data.length
// `this` binding is not fine here
? { done: false, value: this.data[nextIndex++] }
: { done: true };
}
};
}
}
我知道在对象返回上面定义函数,然后将该函数分配为返回对象的属性,但我再次想知道方法速记语法是否可行。
将返回对象上方的next()
定义为常规函数,然后将其绑定到对象属性赋值中:
class Graph {
// constructor
[Symbol.iterator]() {
let nextIndex = 0;
// I know you can do this
const next = function() {
return nextIndex < this.data.length
? { done: false, value: this.data[nextIndex++] }
: { done: true };
};
return {
next: next.bind(this)
};
}
}
将返回对象上方的Next()
定义为箭头函数意味着不需要bind
,但仍然没有方法语法速记:
class Graph {
// constructor
[Symbol.iterator]() {
let nextIndex = 0;
// I know you can also do this
const next = () => {
return nextIndex < this.data.length
? { done: false, value: this.data[nextIndex++] }
: { done: true };
};
return {
next
};
}
}
Icepickle在注释中提出了一个很好的观点,我可以使用存储this
上下文,并在速记方法主体中引用它。我想这是我能找到的最近的了?
class Graph {
// constructor
[Symbol.iterator]() {
let nextIndex = 0;
const self = this;
return {
next() {
return nextIndex < self.data.length
? { done: false, value: self.data[nextIndex++] }
: { done: true };
}
};
}
}
解决问题的理想方法是使用合适的工具:发电机功能。它们也可以与速记语法一起使用,它们将正确地绑定此
。
生成器函数返回符合迭代器协议的对象,并可以使用yield*
将迭代器的输出委托给另一个iterable对象(如数组)。
class Graph {
constructor(initialNodes) {
this.data = [...initialNodes];
}
* [Symbol.iterator]() {
yield* this.data;
}
}
const graph = new Graph([1, 2, 3]);
for (const node of graph) {
console.log(node);
}
问题内容: 我想在Python中使用PhantomJS。我用谷歌搜索了这个问题,但是找不到合适的解决方案。 我发现 可能是一个不错的选择。但是我无法通过一些争论。 使用可能是目前合适的解决方案。我想知道是否有更好的解决方案。 有没有办法在Python中使用PhantomJS? 问题答案: 在python中使用PhantomJS的最简单方法是通过Selenium。最简单的安装方法是 安装NodeJS
我想在Python中使用PhantomJS。我谷歌了这个问题,但找不到合适的解决方案。 我发现可能是一个不错的选择。但我无法向它传递一些论据。 使用目前可能是一个合适的解决方案。我想知道是否有更好的解决办法。 有没有办法在Python中使用PhantomJS?
因为这个方法是在运行时执行的,所以需要对它进行测试吗
这是我的模拟测试: 现在我的问题是,是否有一种方法可以断言我希望在控制器中调用的方法实际上已经被调用。 我知道,但是我怎么用单元测试来断言呢? 例如,这是我在控制器中的请求映射: 现在我想作一些断言,例如: 所以,基本上我想断言,我希望被调用的方法就是被调用的那个方法。我知道这可以在我拥有的MockService对象上完成,即inputValidationService,但我也想为控制器提供类似的
问题内容: 我是ElasticSearch的新手,对停用词有疑问。我有一个索引,其中包含美国的州名。例如:纽约/纽约州,加利福尼亚/加拿大,俄勒冈州/俄勒冈州。我相信俄勒冈州的缩写“ OR”是一个停用词,因此当我将状态数据插入索引时,无法搜索“ OR”。有什么办法可以为此设置自定义停用词,还是我做错了什么? 这是我建立索引的方式: 搜索“ NY”,效果很好。例如: 但是搜索“ OR”会返回零命中:
我只想使用@scheduler注释定期运行spring boot main方法。我已经指定了一些附加代码,这些代码将在启用REST服务之前执行一些预操作。 我想每10秒运行一次上面的主方法。并在主方法中添加了@时间表注释。但它抛出了一个例外: 根据doc@Scheduler的预期行为应调用一个没有args[]的方法 我想在main方法中使用注释,如下所示: 错误: 组织。springframewo