Javascript 获取方法';s实例所有者
给定一个类和它的一个实例Javascript 获取方法';s实例所有者,javascript,oop,Javascript,Oop,给定一个类和它的一个实例 var class=function() { this.propA=99; this.methodA=function() { console.log(this.propA); }; }; var object=new Class(); 我希望能够执行对methodA的调用,其中this将是它的实例,示例(this.propA)将起作用。一模一样 object.methodA.call(object); 但是没有任何对对象的
var class=function() {
this.propA=99;
this.methodA=function() {
console.log(this.propA);
};
};
var object=new Class();
我希望能够执行对methodA的调用,其中this
将是它的实例,示例(this.propA
)将起作用。一模一样
object.methodA.call(object);
但是没有任何对对象的引用。在某些pseoducode中类似于:
var methodToCall=object.methodA;
...
...
methodToCall.call(getInstanceOwnerOf(methodToCall));
这样做的目的是将方法作为回调传递给异步函数,并在调用方法时将this
作为实例
一些解决方法可能是将方法
和对象
传递给该异步函数,或者将此
存储在局部变量中,但这些都是我想要避免的事情。使用绑定到要调用函数的上下文。注意:这将返回一个与原始函数不同的新函数
我通常会创建新函数并给它一个不同的名称,但是你可以用多种方法来实现它
更具体地说,您不能确定函数声明的类是什么,这取决于调用函数的方式以及是否处于严格模式
下面是一个例子:
小提琴:
函数没有“所有者”。函数与对象属性相关联这一事实没有内在的意义。您可以使用.bind()
(在函数原型上)创建一个具有固定此
绑定的函数。
class SomeClass {
constructor(someVar) {
this.myVar = someVar;
this.publicSayVar = this.sayVar.bind(this);
}
sayVar() {
console.log(this.myVar);
}
}
var object = new SomeClass("hello");
var testcall = object.publicSayVar;
testcall();