通过方法参考在类上调用方法

时间:2019-07-17 04:26:24

标签: javascript

我有一个名为func的引用,该引用链接到名为method的静态方法,当我调用func()时,该方法找不到静态方法_open。我不确定为什么,但是我想是因为func是一种方法,因此我将其称为。<​​/ p>

它看起来像这样:

class A {
  static method() {
    this._open()
  }
  static _open() {
    // Do stuff
  }
}

我试图这样调用方法:

/**
 * Finds the data in a object/array if it exists
 * `a.b.c` -> `{a: {b: {c: 'some value'}}}`
 */
function find(query, data) {
  return query.split('.').reduce((obj, val) => {
    return obj ? obj[val] : obj
  }, data)
}

// func is a reference to `method`
let func = find('A.method', {A: A})
func.constructor.prototype[func](...params)

但是,它给了我这个错误:

  

TypeError:func.constructor.prototype [func]不是函数

登录func时,它看起来像这样:

console.log(func.toString())
// Output:
// method() {
//   this._open()
// }

如何在仅引用方法的类上调用静态方法?

2 个答案:

答案 0 :(得分:2)

您需要确保find返回绑定到A的方法,否则,在调用method时,this将引用全局this({ {1}}或未定义),然后您可以调用window

func()

如果仅引用class A { static method(...args) { console.log('args', args); this._open() } static _open() { console.log('opening'); } } const find = () => A.method.bind(A); const func = find('method'); func('abc', 'def');,而不引用A类,则无法再次访问A。仅当func instance 时才引用func.constructor(在这种情况下,引用其func会将您带到.constructor)-但是{ {1}}是类的方法,而不是类的实例。

如果您需要动态检测A返回值之前的最后一个对象是什么,那么可以在必要时绑定该函数,向func函数添加更多逻辑以获取到最后一个对象和最后一个键:

find

答案 1 :(得分:0)

不确定,您为此目的是什么

class A {
  static method() {
    return this._open(...arguments)
  }
  static _open() {
    return arguments;
    // Do stuff
  }
}
function find(classHere, method){
  return classHere[method].bind(classHere);
}
var func = find(A, 'method');
console.log(func('test', 'is', 'this', 'what', 'you', 'want'));