JavaScriptCore全面解析 (4)

NSArray对象与JavaScript中的array相互转转。其子元素也会递归地进行拷贝和转换。

[context evaluateScript:@“var friends = ['Alice','Jenny','XiaoMing']"]; //js->native 你说哪个是真爱? JSValue *friendsValue = context[@"friends"]; NSLog(@"%@, %@, %@", friendsValue[0], friendsValue[1], friendsValue[2]); NSArray *friendsArray = [friendsValue toArray]; NSLog(@"%@, %@, %@", friendsArray[0], friendsArray[1], friendsArray[2]); //native->js 我觉XiaoMing和不不错,给你再推荐个Jimmy context[@"girlFriends"] = @[friendsArray[2], @"Jimmy"]; [context evaluateScript:@"log('girlFriends :'+girlFriends[0]+' '+girlFriends[1])"];

Output:

Alice, Jenny, XiaoMing Alice, Jenny, XiaoMing girlFriends : XiaoMing Jimmy 4. Block/函数和JS function

Objective-C中的block转换成JavaScript中的function对象。参数以及返回类型使用相同的规则转换。

将一个代表native的block或者方法的JavaScript function进行转换将会得到那个block或方法。

其他的JavaScript函数将会被转换为一个空的dictionary。因为JavaScript函数也是一个对象。

5. OC对象和JS对象

对于所有其他native的对象类型,JavaScriptCore都会创建一个拥有constructor原型链的wrapper对象,用来反映native类型的继承关系。默认情况下,native对象的属性和方法并不会导出给其对应的JavaScript wrapper对象。通过JSExport协议可选择性地导出属性和方法。

后面会详细讲解对象类型的转换。

此文已由腾讯云+社区在各渠道发布

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxyzf.html