`
墨日
  • 浏览: 19095 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

PhoneGap 1.5版本 cordova.js 简析 1

阅读更多
PhoneGap升级到1.5除了内部的名字变动外,更改最多的是js部分的调用机制.套用官方论坛的描述就是: 我们希望任意API对于开发者是可安装、可发现、可卸载的,同时希望改变各种平台的js实现存在差异的现状。最大的变化就是在js中引入了模块化机制。

PS: 下文中使用的代码为phonegap 1.5 - android的js代码,作为学习对部分原理简单的介绍一下

所谓的模块化机制其实就是所有的功能定义和调用都必须通过全局定义的require和define两个函数来实现。这种方式既避免了变量名称和作用域的污染,也简化了注册和使用方式等等(废话就不说了)。具体的定义和调用代码格式如下:
//定义
 define('cordova/channel', function(require, exports, module) {
	//..............
	});

//调用
var channel = require('cordova/channel');

我们就单纯的对这两个函数进行下分析,通过上述代码可以看到 define包含两个参数:一个标识这个功能的path:'cordova/channel';一个匿名函数:function(require, exports, module).而require就通过define中的path来直接去的对象功能.那么让我们先看下两个函数的定义:
	require = function(id) {
		if (!modules[id]) {
			throw "module " + id + " not found";
		}
		return modules[id].factory ? build(modules[id]) : modules[id].exports;
	}

	define = function(id, factory) {
		if (modules[id]) {
			throw "module " + id + " already defined";
		}

		modules[id] = {
			id : id,
			factory : factory
		};
	} 

可以看到modules在其中非常重要,应该是一个缓存对象的感觉.define函数只是简单的将对象放入到modules里面,而require也很简单,如果modules中不存在直接报错,否则如果存在工厂方法就返回build函数的结果否则返回exports对象.所以可以了解到关键点应该在build和modules.
	var modules = {};

	function build(module) {
		var factory = module.factory;
		module.exports = {};
		delete module.factory;
		factory(require, module.exports, module);
		return module.exports;
	}

通过上述代码(源码274行)可以看到modules是一个包含在匿名函数中的对象,用来保存其他的注册对象,build就是将没有通过factory创建的对象实例化,然后再放入module内部.所以回到define函数我们可以看到的定义都是如下结构:
define('cordova/plugin/myPlugin', function(require, exports, module) {
		 
		var myObject = {};
		//......
		module.exports = myObject ;
		});

实际是过程是将一个生成后的对象实例或者方法通过module.exports暴露给前面的的modules['cordova/plugin/myPlugin'],而在下次需要使用的时候,将会直接通过require函数从modules['cordova/plugin/myPlugin'].exports 取得.这里还有一个地方就是三个参数require, exports, module,实际上 exports和module.exports是一个东西,代码如下,
factory(require, module.exports, module);


参考了多个phonegap提供的功能定义,发现exports也并没有被使用,所以每次看的时候不需要被这个东西和module的关系把自己搞晕.但是由于js参数传递的特点不能用
exports = myObject进行替换(具体原因可以自己试试看再查资料,这里不做讨论)
分享到:
评论

相关推荐

    cordova.js 是phonegap开发必备插件JS包

    cordova.js 是phonegap开发必备插件JS包 cordova.js 是phonegap开发必备插件JS包

    cordova3.4 jar和js文件

    在这个主题中,我们主要关注的是 Cordova 3.4 版本,它包含了 `cordova-3.4.0.jar` 和 `cordova.js` 这两个关键文件。 `cordova-3.4.0.jar` 文件是 Cordova 的 Java 库,它是 Android 平台上的核心组件。这个 JAR ...

    phonegap-2.9.1中cordova-2.9.1.jar

    最新版本的phonegap-2.9.1是没有cordova-2.9.1.jar的,这里打包好给大家。

    Cordova3.4的js文件和jar包

    本资源包包含了Cordova 3.4版本的js文件和jar包,这些都是PhoneGap开发过程中的核心组件。 首先,我们要理解Cordova的核心概念。Cordova实际上是一个包装器,它将基于Web的技术转换为可以在各个移动平台上运行的...

    cordova phonegap

    cordova-3.4.0.jar,把这个包扔到工程的libs目录下,这样就不用引入CordovaLib 好用,自己编译的最新版本。希望大家喜欢

    Phonegap调用ios原生代码插件:cordova-ios.js

    Phonegap项目中,使用js脚本调用ios中OC代码,需要使用Phonegap提供的一个脚本插件:cordova.js

    phonegap-1.0.0rc2.zip

    1. **PhoneGap库**:包含PhoneGap的JavaScript库和相关的库文件,这些文件使得JavaScript可以调用设备的功能,如摄像头、地理位置、加速度计等。 2. **平台特定的SDK集成**:PhoneGap支持多个移动操作系统,每个...

    phoneGAP2.9.1.zip

    PhoneGap,实际上与Cordova是同义词,它是一个开源框架,允许开发者使用HTML、CSS3和JavaScript等Web技术来构建跨平台的移动应用程序。PhoneGap的核心思想是将Web应用包装在原生的移动应用壳中,使得这些Web应用能够...

    cordova 3.4主文件

    1. **设备API**:Cordova.js提供了一系列设备API,如`device`对象,它包含了关于运行设备的信息,如型号、平台、版本、UUID和方向。例如,`navigator.device.model`返回设备型号,`navigator.device.platform`则返回...

    Apress.Beginning.PhoneGap.Mobile.Web.Framework.for.JavaScript.and.HTML5.2012

    《Apress.Beginning.PhoneGap.Mobile.Web.Framework.for.JavaScript.and.HTML5.2012》这本书主要探讨了如何利用PhoneGap框架结合JavaScript和HTML5技术来开发跨平台的移动应用程序。PhoneGap是一个开源框架,它允许...

    PhoneGap.3.Beginners.Guide.3rd.Edition.1784392286

    Chapter 1: Introduction to PhoneGap Chapter 2: Building Your First PhoneGap Project Chapter 3: Mobile Frameworks Chapter 4: Working with Plugins Chapter 5: Using Device Storage and the Files API ...

    cordova.mocks:易于使用的Apache Cordova模拟

    Cordova.Mocks是模拟对象的集合,用于模拟真实设备外部和标准浏览器中的Apache Cordova / Adob​​e Phonegap核心功能和插件功能。 安装 使用该库的最简单方法是通过在bower.json文件中添加以下依赖项来使用拉动它...

    PhoneGap开发入门借鉴.pdf

    其中,`phonegap.js`是核心JavaScript库,而`phonegap.jar`是Java库,它们都是构建PhoneGap应用所必需的。 在Eclipse中创建新的Android项目后,需要在项目结构中创建特定的目录。`libs`目录用于存放`phonegap.jar`...

    PhoneGap/Cordova的支付宝Android插件

    这个插件的目的是桥接JavaScript和Android原生代码,使PhoneGap/Cordova应用能够调用支付宝SDK,实现支付流程。 集成这个插件的过程大致如下: 1. **安装插件**:首先,开发者需要在项目的配置文件(config.xml)...

    phonegap/cordova 案例android版本

    在这个“phonegap/cordova案例android版本”中,我们将深入探讨这两个工具如何协同工作,以及如何在Android平台上创建一个简单的应用。 PhoneGap是由Adobe维护的一个开放源代码项目,它基于Cordova,并提供了额外的...

    cordova.5.1.jar

    基于PhoneGap/Cordova的Hybrid开发所需要的Cordova代码jar包,版本号是较新的5.1

    jxcore-cordova, 用于 Apache cordova/phonegap的jxcore/node.js 插件.zip

    jxcore-cordova, 用于 Apache cordova/phonegap的jxcore/node.js 插件 ( 基于 JXcore插件构建的) 插件插件目标这里项目的目的是:为 Apache Cordova ( Android,iOS ) 创建一个易于使用的node.js 插件详细显示jxcore...

    Eclipse+android+jdk+phonegap开发环境教程.pdf

    其次,需要将 PhoneGap 框架的核心文件 phonegap.js 和 phonegap.jar 复制到对应的文件夹下。 然后,需要修改工程的某些文件,包括将 Activity 的父类改为 DroidGap,并将 setContentView() 行改为 super.loadUrl(...

    phonegap3.4.0如何安装.docx

    PhoneGap 是一个流行的开源框架,它允许开发者使用 HTML5、CSS3 和 JavaScript 来构建跨平台的移动应用程序。PhoneGap 3.4.0 版本的安装过程涉及多个步骤,包括在线安装、制作 Jar 文件以及目录整理。以下是详细的...

    phonegap5.4.1(cordova)拍照并且上传功能的一个Android应用demo

    1. **PhoneGap和Cordova**: PhoneGap是Adobe提供的一个基于Apache Cordova的开发环境。Cordova是一个开源的移动设备API库,它使得Web应用程序可以利用设备的硬件功能。PhoneGap提供了一个友好的开发环境和工具,让...

Global site tag (gtag.js) - Google Analytics