2014-12-31 4 views
1

Итак, я пытаюсь понять, как работает JavascriptCore.Javascriptcore ios вызывает метод класса

Итак, сначала я попытался вызвать одну функцию, но теперь я пытаюсь вызвать функцию внутри класса.

Мой 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 
} 

Моя проблема заключается в том, что она отлично работает с одной функции и функции в объекте, но не с этим в функции.

Знаете ли вы, что это правильное поведение JavaScriptCore или если я что-то делаю неправильно?

Большое спасибо!

ответ

1

Я понял, что делаю что-то неправильно.

Поскольку это класс, мне сначала нужно создать объект, прежде чем вызывать его методы.

Вот как это сделать:

JSValue* c = [_context[@"testClass"] constructWithArguments:@[]]; 
[c invokeMethod:@"toto" withArguments:@[]]; 
Смежные вопросы