ES6 中对 class 的引用丢失
The reference to the class in ES6 is lost
我有以下结构 Javacript es5-es6 并且控制器 class 在 class Get 中丢失了引用,我已经在调查但我找不到如何避免丢失引用。
class Controller {
constructor() {
this.name = 'Test';
}
test() {
console.log(1, this.name);
}
}
referenceController = new Controller();
// working reference: console.log(1, 'Test');
referenceController.test();
class Get {
method() {
return {
controller: referenceController.test
}
}
}
// Lost self reference: console.log(1, undefined)
new Get().method().controller()
在本节中,您将测试函数添加为返回对象的 属性。
{
controller: referenceController.test
}
然后,当你调用它作为那个对象的方法时(method().controller()
) this
引用这个对象,而name
属性是从对象。
您可以绑定上下文以保留引用:
referenceController.test.bind(referenceController)
您的 method
函数 returns 具有键 controller
的对象,其值为 不是对 Controller
class 但是 函数 引用了 this
.
方法的 this
上下文将被分配给它附加到的对象 当它被调用时 .
所以new Get().method().controller()
调用方法 test
,其中 this
是 new Get().method()
解析为的值:
{
controller: referenceController.test
}
因此注销 undefined
修改你的Getclass如下:
class Controller {
constructor() {
this.name = 'Test';
}
test() {
console.log(1, this.name);
}
}
referenceController = new Controller();
// working reference: console.log(1, 'Test');
referenceController.test();
class Get {
method() {
return {
controller: referenceController
}
}
}
// this logs out correctly
new Get().method().controller.test();
上面的工作是因为 new Get().method().controller
解析为 Controller
class 实例 referenceController 有一个 属性 定义 name
有一个值。
我有以下结构 Javacript es5-es6 并且控制器 class 在 class Get 中丢失了引用,我已经在调查但我找不到如何避免丢失引用。
class Controller {
constructor() {
this.name = 'Test';
}
test() {
console.log(1, this.name);
}
}
referenceController = new Controller();
// working reference: console.log(1, 'Test');
referenceController.test();
class Get {
method() {
return {
controller: referenceController.test
}
}
}
// Lost self reference: console.log(1, undefined)
new Get().method().controller()
在本节中,您将测试函数添加为返回对象的 属性。
{
controller: referenceController.test
}
然后,当你调用它作为那个对象的方法时(method().controller()
) this
引用这个对象,而name
属性是从对象。
您可以绑定上下文以保留引用:
referenceController.test.bind(referenceController)
您的 method
函数 returns 具有键 controller
的对象,其值为 不是对 Controller
class 但是 函数 引用了 this
.
方法的 this
上下文将被分配给它附加到的对象 当它被调用时 .
所以new Get().method().controller()
调用方法 test
,其中 this
是 new Get().method()
解析为的值:
{
controller: referenceController.test
}
因此注销 undefined
修改你的Getclass如下:
class Controller {
constructor() {
this.name = 'Test';
}
test() {
console.log(1, this.name);
}
}
referenceController = new Controller();
// working reference: console.log(1, 'Test');
referenceController.test();
class Get {
method() {
return {
controller: referenceController
}
}
}
// this logs out correctly
new Get().method().controller.test();
上面的工作是因为 new Get().method().controller
解析为 Controller
class 实例 referenceController 有一个 属性 定义 name
有一个值。