随笔分类 - 移动WEB开发
摘要:Java EE 开发平台随手记 Java EE开发平台随手记1 Java EE开发平台随手记2——Mybatis扩展1 Java EE开发平台随手记3——Mybatis扩展2 Java EE开发平台随手记4——Mybatis扩展3 Java EE开发平台随手记5——Mybatis动态代理接口方式的原
阅读全文
摘要:在引导程序中,还导入了一个模块cordova/platform,看看源码:define("cordova/platform", function(require, exports, module) { module.exports = { id: "android", initialize:function() { }, objects: { }, merges: { } };});我们看到,在platform中,有四个属性:、1、id:我们这里的源码是取自android子目录下,这里平台id相应的为android,其...
阅读全文
摘要:在引导程序中,导入cordova/builder之后,便是导入cordova/common,这是所有平台公共的模块部分,在cordova/common构造函数中,通过返回一个配置对象,非常精巧的将公共模块组织起来,并通过引导程序中的builder.build(base.objects).intoButDontClobber(window)将这些模块在window全局中构建。 我们看看这个配置对象:define("cordova/common", function(require, exports, module) {module.exports = { objects: {
阅读全文
摘要:这一篇我们分析cordova/builder这个模块。 在具体看这个模块之前,先复习一下Object类型。(1)Object类型是所有它的实例的基础,所有的内置类型都是通过原型继承的方式继承了Object类。(2)Object的每个实例都有一个Constructor属性,指向创建这个实例的函数。(3)Object的每个实例都有下面的方法:A、hasOwnProperty(propertyName):检查propertyName是否在当前实例中(在实例原型中同样返回false)。B、propertyIsEnumerable(propertyName):检查propertyName是否可以使...
阅读全文
摘要:在源码中,将cordova作为全局对象构建(window.cordova = require('cordova'))之后,又是一个立即调用的匿名函数,这是PhoneGap库的引导程序: 1 (function (context) { 2 var channel = require("cordova/channel"),//事件通道 3 _self = { 4 boot: function () {//定义引导函数 5 } 6 }; 7 8 channel.onNativeReady.subscri...
阅读全文
摘要:转了一圈,再回到cordova这个模块。 在cordova中,首先是导入cordova/channel模块,这就是前一篇分析的,之后就触发在channel创建的onDOMContectLoaded事件,接着为了侦听deviceready、resume、pause等事件而重新定义了DOM规范中window和document的addEventListener和removeEventListener,然后再创建cordova这个对象,并作为结果“返回”。 1 function (require, exports, module) { 2 3 var channel = require...
阅读全文
摘要:分析完了cordova/utils之后,回到cordova/channel这个模块来,这个模块是实现事件监听的基础,当然,我们的焦点是它的构造函数,源码中是匿名的,这里为了行文方便,姑且称之为factory。 要分析一个函数,从外部来说,知道怎么调用它就行了,这也就是通常所说的暴露在外的API,我们知道,factory是作为一个参数来传递给define函数的,并在第一次require中实际调用的,之后就清除了这个构造函数,回过头来看看这个调用的代码:1 function build(module) {2 var factory = module.factory;3 ...
阅读全文
摘要:正则表达式的使用非常广泛,用法也比较灵活,不过平常遇到的都是正则表达式的简单用法,在这篇文章里,将尽量简单的梳理一下正则表达式,进而分析上一篇里面遗留的问题。一、正则表达式基础1、普通字符:字母、数字、下划线、汉字以及所有没有特殊意义的字符,如ABC123。在匹配时,匹配与之相同的字符。2、特殊字符:(需要时,使用反斜杠“\”进行转义)字符含义字符含义字符含义字符含义\a响铃符 = \x07^匹配字符串的开始位置\b匹配单词的开始或结束{n}匹配n次\f换页符 = \x0C$匹配字符串的结束位置\B匹配不是单词开始和结束的位置{n,}匹配至少n次\n换行符 = \x0A()标记一个子表达式..
阅读全文
摘要:在导入cordova的过程中,也即在调用cordova的工厂函数中,首先遇到的是导入另一个模块cordova/channel(注:这里由于函数声明提升,实际上是先执行工厂函数内部的其它函数声明,然后再执行下面的语句,但对这里的分析不受影响)define("cordova", function(require, exports, module) { var channel = require('cordova/channel'); //其它代码});然后,我们跟踪到cordova/channel的工厂函数,可以看到,仍然需要先导入cordova/utils这个
阅读全文
摘要:跟随代码的执行,在定义了require和define并赋值后,是将cordova所有模块一一注册,例如:define("cordova",function(require,exports,module){//工厂函数内部实现代码});这里需要注意的是,工厂函数在这个时候并没有实际执行,而只是定义,并作为一个参数传递给define函数。所有模块注册完之后,通过window.cordova = require('cordova');导入至全局环境。因为是注册后第一次导入,所以在执行require('cordova')时,modules['
阅读全文
摘要:先看源码: 1 // file: lib/scripts/require.js 2 var require,//导入函数,导入cordova库的内部已经注册的模块,第一次导入时,先创建模块 3 define; //注册函数,注册cordova的内部模块 4 5 // 通过一个立即调用的匿名函数,给require和define赋值 6 (function () { 7 var modules = {}; // 缓存所有的模块,初始化为一个空对象 8 9 function build(module) {//内部私有函数10 var factory ...
阅读全文
摘要:开始分析cordova-2.0.0.js的源码结构,使用UE打开这个文件,按Ctrl+Add键将代码全部折叠,可以看到结构如下:/** 版权申明及注释部分*/;(function(){// 这里是cordova的内部代码})();1、一开始就是一个分号";",我们知道,分号在javascript中主要作用就是结束一个语句以及构成for循环的语法结构,那么在这里是什么作用呢?个人理解,由于javascript中语句结束的分号并不是强制使用的,在这里主要是为了规范,以间隔于程序中编写或导入的其它js脚本,也就是给其它js脚本一个明确的语句结束符。这里强烈建议,每一个js语句,都
阅读全文
摘要:版本说明:本系列文章使用的源码版本为2.0.0,可以从http://www.phonegap.com/download下载,将下载的文件解压缩,找到phonegap-phonegap-ff91e6e\lib\android|cordova-2.0.0.js(内部版本号ff91e6e可能会有不同),这就是源码分析中的主角。工具:任何一款具有js语法高亮和折叠的工具,我阅读源码使用的是UE和Sublime Text2,可以从http://www.sublimetext.com/下载SubLime Text2,这款软件可以无限期免费试用,可以参考异次元上的介绍文章http://www.iplayso
阅读全文