gpt4 book ai didi

Javascriptcore ios调用类方法

转载 作者:行者123 更新时间:2023-11-29 12:31:00 26 4
gpt4 key购买 nike

所以我想了解 JavascriptCore 的工作原理。

所以首先我尝试调用单个函数,但现在我尝试调用类中的函数。

我的 javascript 代码是这样的

var sayHelloAlfred = function()
{
log("Hello Alfred");
}

var testClass = function()
{
this.toto = function()
{
log("Toto in class");
}
}

var testObject = {

toto : function()
{
log("Toto in object");
}

}

还有我的 ViewController 代码:

- (void)viewDidLoad {
[super viewDidLoad];

_context = [[JSContext alloc] initWithVirtualMachine:[[JSVirtualMachine alloc] init]];

_context[@"log"] = ^(NSString *text) {
NSLog(@"%@", text);
};

NSString *scriptFilePath = [[NSBundle mainBundle] pathForResource:@"main" ofType:@"js"];
NSString *scriptFileContents = [NSString stringWithContentsOfFile:scriptFilePath encoding:NSUTF8StringEncoding error:nil];
[_context evaluateScript:scriptFileContents];
}

- (IBAction)doStuff:(id)sender
{
[_context[@"sayHelloAlfred"] callWithArguments:@[]]; // Works
[_context[@"testClass"] invokeMethod:@"toto" withArguments:@[]]; // Doesn't work
[_context[@"testObject"] invokeMethod:@"toto" withArguments:@[]]; // Works
}

我的问题是它可以完美地处理单个函数和对象中的函数,但不能处理函数中的 this。

你知道这是 JavaScriptCore 的正确行为还是我做错了什么?

提前致谢!

最佳答案

我意识到我做错了什么。

因为它是一个类,所以我首先需要在调用它的方法之前创建一个对象。

这是怎么做的:

JSValue* c = [_context[@"testClass"] constructWithArguments:@[]];
[c invokeMethod:@"toto" withArguments:@[]];

关于Javascriptcore ios调用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27725078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com