JSPatch 主要使用一个名为JavascriptCore 的库。该库是webkit的重要组成部分。主要解析JS并提供执行环境。下面引用的是JamesYu的文章,写得非常清楚。 http://www.jianshu.com/p/a329cd4a67ee
以JSPatch中的代码为例:
//OC在上下文中注册一个名为_OC_callI的方法。方法实现是等号后面的块。
context[@"_OC_callI"]=^id(JSValue *obj, NSString *selectorName, JSValue *arguments, BOOL isSuper) {
返回callSelector(nil, 选择器名称, 参数, obj, isSuper);
};//在js中调用该方法
var ret=实例? _OC_callI(实例,选择器名称,参数,isSuper):
_OC_callC(clsName, selectorName, args)//用JS写一个方法
var _formatOCToJS=函数(obj) {
if (obj===undefined || obj===null) 返回false
if (typeof obj=="object") {.//OC中如何调用js
返回[[JSContext currentContext][@"_formatOCToJS"] callWithArguments:@[formatOCToJS([JPBoxing boxWeakObj:obj])]];而JSPatch中所有带OC的方法都是js调用的OC方法
对于刚开始阅读JSPatch 的iOSers 来说另一个难点是js 的一些问题。虽然我本来是接前端外包写页面的,但是看到这段代码我还是有很多疑惑,比如jspatch.js中的代码是这样的
var 全局=这个
;(功能() {
.
}()1.上述代码有什么作用?function(){} 是匿名函数,(function() {})() 可以将匿名函数封装成表达式并自行执行
首先,使用闭包来避免全局变量污染。例如,如果在js文件中定义了变量a,然后在js文件中也定义了变量a,则第一个文件中的变量将被覆盖。如果使用闭包,就不会出现这个问题。要知道,在闭包后面加一个()就可以直接执行代码了。
2.为什么要有一个分号在闭包头?在匿名函数附近使用括号或某些一元运算符的习惯用法是引导解析器指示该运算符是一个表达式。但不常用在开头加分号,以避免用于函数执行或下标操作。
3.那个global = this有什么用?将上下文this赋给global,可以在下面的匿名函数中将全局变量绑定到global,方便调用。
var _customMethods={
_c: 函数(方法名){.}
super: 函数() {.}
}4.上述代码是什么?在js中以键值对的形式定义一个对象,如下所示。上面的代码实际上是一个对象,key对应的value是一个匿名函数。
var 人={
第:章"比尔",
姓氏: "盖茨",
号码: 5566
};5.JSPatch源码中用到的js的apply方法和call方法是什么?这里有详细解释http://uule.iteye.com/blog/1158829
6.js里的arguments是什么?arguments是一个特殊的js对象,可以获取传入的参数,即使你没有显式声明需要传入的参数,例如
函数测试() {
alert(arguments.length);//显示2
}
test(1,2)7.Array.prototype.slice.call()有什么用?该方法类可以将包含长度的js对象转换为数组,例如
var a={length:2,0:"零",1:"一"};
【深入解析JSPatch原理:基础篇】相关文章:
用户评论
终于找到一篇讲解JSPatch原理的文章了!我一直很好奇它是怎么工作的。
有8位网友表示赞同!
对入门级的解析很有帮助,可以让我更好地了解JSPatch有哪些强大的功能。
有14位网友表示赞同!
原来JSPatch可以灵活修改程序源代码,真厉害!
有5位网友表示赞同!
学习一下JSPatch,也许以后能自己开发一些有趣的App!
有13位网友表示赞同!
这个基础篇讲解得很清楚,适合像我一样对前端开发不太熟悉的人读。
有15位网友表示赞同!
我要去看看怎么把JSPatch应用到我的项目中了,听起来很有潜力。
有5位网友表示赞同!
这篇文章让我对动态拼接网页的原理有了更清楚的理解。
有9位网友表示赞同!
之前就听说过JSPatch,现在看来它确实是个强大的工具。
有5位网友表示赞同!
希望后续还有进阶篇,可以深入讲解一些更复杂的部分。
有18位网友表示赞同!
这个基础篇讲解得很全面,已经让我对JSPatch有了初步的认识。
有13位网友表示赞同!
原来JSPatch可以用JavaScript来修改App的功能,真让人眼前一亮!
有10位网友表示赞同!
想学点高级的脚本开发技巧,JSPatch是个不错的起点。
有20位网友表示赞同!
这个标题太吸引人了,马上就开始读!
有14位网友表示赞同!
学习新技术总是很exciting。 JSPatch一定能帮我写出更酷的作品!
有5位网友表示赞同!
看了这篇基础篇,感觉JSPatch应用范围非常广泛!
有19位网友表示赞同!
对前端开发感兴趣的人应该都得了解一下JSPatch。
有14位网友表示赞同!
这种动态修改代码的能力,真让人感叹科技的进步!
有8位网友表示赞同!
感谢作者分享这么好的文章,我终于可以开始学习JSPatch了!
有5位网友表示赞同!
期待能通过学习JSPatch,提升自己的开发技能水平。
有11位网友表示赞同!