微信小程序使用第三方库Underscore.js步骤详解


Posted in Javascript onSeptember 27, 2016

前言

Underscore.js是一个很精干的库,压缩后只有4KB。Underscore 提供了100多个函数,包括常用的:map、filter、invoke — 当然还有更多专业的辅助函数,如:函数绑定、JavaScript 模板功能、创建快速索引、强类型相等测试等等。弥补了标准库的不足,大大方便了JavaScript的编程。

微信小程序无法直接使用require( 'underscore.js' )进行调用。

微信小程序模块化机制

微信小程序运行环境支持CommoJS模块化,通过module.exports暴露对象,通过require来获取对象。

微信小程序Quick Start utils/util.js

function formatTime(date) {
 var year = date.getFullYear()
 var month = date.getMonth() + 1
 var day = date.getDate()

 var hour = date.getHours()
 var minute = date.getMinutes()
 var second = date.getSeconds();


 return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

function formatNumber(n) {
 n = n.toString()
 return n[1] ? n : '0' + n
}

module.exports = {
 formatTime: formatTime
}

pages/log/log.js

var util = require('../../utils/util.js')
Page({
 data: {
 logs: []
 },
 onLoad: function () {
 this.setData({
 logs: (wx.getStorageSync('logs') || []).map(function (log) {
 return util.formatTime(new Date(log))
 })
 })
 }
})

原因分析

Underscore CommonJs模块导出代码如下:

// Export the Underscore object for **Node.js**, with
// backwards-compatibility for the old `require()` API. If we're in
// the browser, add `_` as a global object.
if (typeof exports !== 'undefined') {
 if (typeof module !== 'undefined' && module.exports) {
 exports = module.exports = _;
 }
 exports._ = _;
} else {
 root._ = _;
}

exports、module必须都有定义,才能导出。通过测试,微信小程序运行环境exports、module并没有定义

//index.js

//获取应用实例
var app = getApp();

Page({ 

 onLoad: function () {
 console.log('onLoad');
 var that = this;

 console.log('typeof exports: ' + typeof exports); 
 console.log('typeof module: ' + typeof exports); 

 var MyClass = function() {

 }

 module.exports = MyClass;

 console.log('typeof module.exports: ' + typeof module.exports); 
 }
})

微信小程序使用第三方库Underscore.js步骤详解

解决方法

修改Underscore代码,注释原有模块导出语句,使用module.exports = _ 强制导出

/*
 // Export the Underscore object for **Node.js**, with
 // backwards-compatibility for the old `require()` API. If we're in
 // the browser, add `_` as a global object.
 if (typeof exports !== 'undefined') {
 if (typeof module !== 'undefined' && module.exports) {
 exports = module.exports = _;
 }
 exports._ = _;
 } else {
 root._ = _;
 }
 */

 module.exports = _;
/*
 // AMD registration happens at the end for compatibility with AMD loaders
 // that may not enforce next-turn semantics on modules. Even though general
 // practice for AMD registration is to be anonymous, underscore registers
 // as a named module because, like jQuery, it is a base library that is
 // popular enough to be bundled in a third party lib, but not be part of
 // an AMD load request. Those cases could generate an error when an
 // anonymous define() is called outside of a loader request.
 if (typeof define === 'function' && define.amd) {
 define('underscore', [], function() {
 return _;
 });
 }
 */

使用Underscore.js

//index.js

var _ = require( '../../libs/underscore/underscore.modified.js' );

//获取应用实例
var app = getApp();


Page( {

 onLoad: function() {
 //console.log('onLoad');
 var that = this;

 var lines = [];

 lines.push( "_.map([1, 2, 3], function(num){ return num * 3; });" );
 lines.push( _.map( [ 1, 2, 3 ], function( num ) { return num * 3; }) );

 lines.push( "var sum = _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);" );
 lines.push( _.reduce( [ 1, 2, 3 ], function( memo, num ) { return memo + num; }, 0 ) );

 lines.push( "var even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });" );
 lines.push( _.find( [ 1, 2, 3, 4, 5, 6 ], function( num ) { return num % 2 == 0; }) );

 lines.push( "_.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });" );
 lines.push( _.sortBy( [ 1, 2, 3, 4, 5, 6 ], function( num ) { return Math.sin( num ); }) );

 lines.push( "_.indexOf([1, 2, 3], 2);" );
 lines.push( _.indexOf([1, 2, 3], 2) );

 this.setData( {
  text: lines.join( '\n' )
 })
 }
})

微信小程序使用第三方库Underscore.js步骤详解

总结

以上就是微信小程序使用第三方库Underscore.js的全部内容,希望对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JavaScript常用对象的方法和属性小结
Jan 24 Javascript
JavaScript 验证码的实例代码(附效果图)
Mar 22 Javascript
网页中返回顶部代码(多种方法)另附注释说明
Apr 24 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
Aug 13 Javascript
深入分析jquery解析json数据
Dec 09 Javascript
鼠标悬停小图标显示大图标
Jan 22 Javascript
浅析JavaScript回调函数应用
May 22 Javascript
js实现百度搜索提示框
Feb 05 Javascript
js实现适配不同的屏幕大小
Apr 10 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
Sep 11 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
Dec 07 Javascript
es6数据变更同步到视图层的方法
Mar 04 Javascript
微信小程序使用第三方库Immutable.js实例详解
Sep 27 #Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
Sep 27 #Javascript
微信小程序 开发指南详解
Sep 27 #Javascript
纯JavaScript 实现flappy bird小游戏实例代码
Sep 27 #Javascript
jQuery实现表格文本框淡入更改值后淡出效果
Sep 27 #Javascript
angular基于路由控制ui-router实现系统权限控制
Sep 27 #Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
Sep 26 #Javascript
You might like
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
php批量修改表结构实例
2017/05/24 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python的绘图工具matplotlib使用实例
2014/07/03 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
python各层级目录下import方法代码实例
2020/01/20 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
计算s=f(f(-1.4))的值
2014/05/06 面试题
大学生毕业的自我评价分享
2014/01/02 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js