我在全局范围内的课堂之外拥有此功能。
function toggleDescriptor(key, descriptors = 0){
let _a, _b, _c;
if (descriptors) [_a, _b, _c] = descriptors;
else [_a, _b, _c] = ["writable", "enumerable", "configurable"];
if(this[key] == undefined){
__defprty(this, key, {[_a] : true, [_b] : true, [_c] : true});
}
else{
__defprty(this, key, {[_a] : false, [_b] : false, [_c] : false});
}
}
我在这样的类中称呼它:
class Application {
constructor(state){
this.interface = new Interface(this);
this.interface.state = state;
toggleDescriptor("interface"); //this not works...
}
run(){
this.interface.state.handle();
}
}
但是,toggleDescriptor中的this
包含window
而不是Application
类。我猜它总是将this
设置为window
对象。但我想将此功能保留在外部,以便其他类可以使用它而不必重复使用此功能。那么,如何在toggleDescriptor
类中调用Application
时指示Application
?
答案 0 :(得分:3)
这是绑定,调用,应用程序进入的地方。
他们会保留这个:)
我认为您需要的是toggleDescriptor.call(this, "interface");
在线上有很多很棒的资源,但是非常简短的版本是:
绑定:toggleDescriptor.bind(this, "interface")
会将this
绑定到toggleDescriptor
而不调用toggleDescriptor
-适用于要引用该函数但不引用该函数的情况称呼它(例如window.addEventListener('click', toggleDescriptor.bind(this, "interface"))
呼叫:toggleDescriptor.call(this, "interface")
以toggleDescriptor
作为当前this
this
应用:toggleDescriptor.apply(this, ["interface"])
与call类似,但您将参数作为数组传递
而且,正如@@ Alkis Mavridis用户在上面的评论中所提到的,您可以只在this
函数中使用toggleDescriptor
,而不愿意使用_obj = () => {this}
。我虽然有时(很少)在使用箭头功能和bind
混合时发现了一些意外的行为-我认为是因为箭头功能以一种我不知道的方式帮助管理范围(this
是什么)完全理解。
答案 1 :(得分:2)
您尝试过
const myApp = new Application(); //or however you acuire this object
toggleDescriptor.call(myApp, "interface"); //"this" inside toggleDescriptor will be myApp
有关呼叫功能的详细信息,请参见here。
我还认为您根本不需要_obj变量。只需访问此即可。