获取方法的实例所有者

时间:2016-10-23 04:01:47

标签: javascript oop

给出一个类及其实例

var class=function() {
    this.propA=99;
    this.methodA=function() {
        console.log(this.propA);
    };
};

var object=new Class();

我希望能够对方法A执行调用,其中this将成为其实例,示例(this.propA)将起作用。正好是

object.methodA.call(object);

没有引用object。在某些pseoducode中就像这样:

var methodToCall=object.methodA;
...
...
methodToCall.call(getInstanceOwnerOf(methodToCall));

这样做的目的是将方法作为回调传递给异步函数,并在调用方法时将this作为实例。

一些解决方法是将methodobject传递给该异步函数,或将this存储在局部变量中,但这些是我想要避免的。

1 个答案:

答案 0 :(得分:1)

使用绑定到bind到您想要函数调用的上下文。注意这会返回一个与原始函数不同的NEW函数。

我通常创建新功能并给它一个不同的名称,但你可以采用多种方式。

更具体地说,你不能确定this是声明函数的类,取决于你如何调用函数以及你是否处于严格模式。

以下示例:

小提琴:https://jsfiddle.net/f7af535L/

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();