44
55JavaScriptCore 是 JavaScript 引擎,通常会被叫做虚拟机,专门设计来解释和执行 JavaScript 代码,可以理解为一个浏览器的运行内核。
66
7- JavaScriptCore Framework 是 iOS7 引入的新功能,其实就是基于 Webkit 中以 C/C++ 实现的 JavaScriptCore 的一个封装,大多数 iOS 比较熟悉的是它的 Objective-C API,可以用简介的方式 JS 与Native 通讯 ,其实它还有C API的部分,虽然也是开源的,但是在查看源代码时只有较少的介绍,而且我们知道 Objective-C API 只是 C API 接口的封装。本文主要介绍 C API 部分,帮助大家更好理解 JavaScriptCore Framework。
7+ JavaScriptCore Framework 是 iOS7 引入的新功能,其实就是基于 Webkit 中以 C/C++ 实现的 JavaScriptCore 的一个封装,大多数 iOS 比较熟悉的是它的 Objective-C API,可以用简洁的方式实现 JS 与Native 交互 ,其实它还有C API的部分,虽然也是开源的,但是在查看源代码时只有较少的介绍,而且我们知道 Objective-C API 只是 C API 接口的封装。本文主要介绍 C API 部分,帮助大家更好理解 JavaScriptCore Framework。
88
99## JavaScriptCore C API
1010
@@ -20,7 +20,7 @@ JavaScriptCore C API 部分包含六个类 下面我们详细解释每个类的
2020
2121- ##### JSObjectRef.h
2222
23- JSObjectRef 相当于 Objective-C 中的 JSObject,它代表一个JavaScript对象,交互的核心放在都在这个类中实现 。
23+ JSObjectRef 相当于 Objective-C 中的 JSObject,它代表一个JavaScript对象,交互的核心都在这个类中实现 。
2424
2525- ##### JSStringRef.h
2626
@@ -247,23 +247,33 @@ JSObjectRef ObjectCallAsConstructor(JSContextRef ctx, JSObjectRef constructor, s
247247 JSGlobalContextRef globalContext = JSGlobalContextCreateInGroup(contextGroup, nil);
248248 JSObjectRef globalObject = JSContextGetGlobalObject(globalContext);
249249
250- JSClassDefinition constructorClassDef = kJSClassDefinitionEmpty;
250+ JSClassDefinition constructorClassDef = kJSClassDefinitionEmpty;
251251 constructorClassDef.getProperty = ObjectGetPropertyCallback;
252252 constructorClassDef.callAsFunction = ObjectCallAsFunctionCallback;
253253 constructorClassDef.callAsConstructor = ObjectCallAsConstructor;
254254 constructorClassDef.hasInstance = ObjectConstructorHasInstance;
255255 constructorClassDef.finalize = ObjectConstructorFinalize;
256-
256+
257257 JSClassRef loaderClass = JSClassCreate(&constructorClassDef);
258258
259- JSObjectRef loader = JSObjectMake(globalContext, loaderClass, (__bridge void *)(self.view));
259+ JSObjectRef globalObject = JSContextGetGlobalObject(globalContext);
260+
260261 JSStringRef logFunctionName = JSStringCreateWithUTF8CString("log");
261- JSObjectSetProperty(globalContext, globalObject, logFunctionName, loader, kJSPropertyAttributeNone, nil);
262+ JSObjectRef functionObject = JSObjectMakeFunctionWithCallback(globalContext, logFunctionName, &ObjectCallAsFunctionCallback);
263+
262264
263- JSStringRef logCallStatement = JSStringCreateWithUTF8CString("log()" );
265+ JSObjectSetProperty(globalContext, globalObject, logFunctionName, functionObject, kJSPropertyAttributeNone, nil );
264266
267+ JSStringRef logCallStatement = JSStringCreateWithUTF8CString("log()");
265268 JSEvaluateScript(globalContext, logCallStatement, nil, nil, 1,nil);
266269
270+
271+ JSObjectRef loader = JSObjectMake(globalContext, loaderClass, (__bridge void *)(self.view));
272+ JSStringRef myclass = JSStringCreateWithUTF8CString("myclass");
273+ JSObjectSetProperty(globalContext, globalObject, myclass, loader, kJSPropertyAttributeNone, nil);
274+
275+ JSStringRef callMyclass = JSStringCreateWithUTF8CString("myclass.start()");
276+ JSEvaluateScript(globalContext, callMyclass, nil, nil, 1,nil);
267277 /* memory management code to prevent memory leaks */
268278
269279 JSGlobalContextRelease(globalContext);
0 commit comments