Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取方法';s实例所有者_Javascript_Oop - Fatal编程技术网

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