我有一个名为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()
// }
如何在仅引用方法的类上调用静态方法?
答案 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'));