javascript - 获取方法的实例所有者

标签 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 methodToCall=object.methodA;
...
...
methodToCall.call(getInstanceOwnerOf(methodToCall));

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

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

最佳答案

使用绑定(bind)到bind到您想要调用函数的上下文。请注意,这将返回一个与原始函数不同的新函数。

我通常创建新函数并给它一个不同的名称,但您可以通过多种方式完成它。

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

下面是一个例子:

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

关于javascript - 获取方法的实例所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40199381/

相关文章:

javascript - 如何用JS动态添加HTML?

oop - MATLAB - 为什么它提示 classdef 对象的 @-folders?

mysql - Node unhandel promises 和 imports oop

javascript - VueJS : Getting values from multiple checkbox binding in textboxes

javascript - 将带有类的元素添加到模板循环(vanilla JS)

java - Java中接口(interface)的有用范围

php - 将多维数组对象映射到类中的变量

oop - 无状态面向对象编程与功能编程?

javascript - 如何从 Summernote 文本编辑器导出纯文本

javascript - sqlite - 无法使用 WHERE 子句查询 Web 数据库