如何从另一种方法调用JavaScript类的方法?

问题描述:

我正在使用iOS的JavaScriptCore框架,但我很难得到一个JavaScript(es6)类来调用另一种方法。这是我的游乐场代码。如何从另一种方法调用JavaScript类的方法?

do { 
    let j = JSContext()! 

    j.evaluateScript("class Base123 { method1(arg1) { return this.method2(arg1) } method2(arg1) { return {\"asdf\":\"123\"} } }") 
    j.evaluateScript("var b = new Base123(); var handler = b.method1") 
    j.evaluateScript("handler(4)")?.toDictionary() //<-- expected ["asdf": "123"] 
} 

基本上我是用两种方法创建一个名为Base123的类。 method1调用method2。然而,对method2的调用是未定义的。

有谁知道如何做到这一点?

重新格式化类的定义,使之更易于阅读:

class Base123 { 
    method1(arg1) { 
     return this.method2(arg1) 
    } 
    method2(arg1) { 
     return {"asdf":"123"} 
    } 
} 

有什么不对的JavaScript的定义是什么?

+0

感谢凯文,我能够通过封闭封装来解决它。 'var handler =(arg1)=> b.method1(arg1)' – DerrickHo328

尝试用var handler = b.method1.bind(b)代替var handler = b.method1