微信小程序使用第三方库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 11 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
pace.js页面加载进度条插件
Sep 29 Javascript
关于JavaScript数组你所不知道的3件事
Aug 24 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
Aug 28 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
基于es6三点运算符的使用方法(实例讲解)
Oct 12 Javascript
jquery树形插件zTree高级使用详解
Aug 16 jQuery
Vue修改项目启动端口号方法
Nov 07 Javascript
javascript中call,apply,bind的区别详解
Dec 11 Javascript
详解Vue slot插槽
Nov 20 Vue.js
微信小程序使用第三方库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
如何去掉文章里的 html 语法
2006/10/09 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
package.json文件配置详解
2017/06/15 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
python二分法实现实例
2013/11/21 Python
Python的ORM框架SQLObject入门实例
2014/04/28 Python
linux下python抓屏实现方法
2015/05/22 Python
python爬虫之百度API调用方法
2017/06/11 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
django解决跨域请求的问题详解
2019/01/20 Python
分析经典Python开发工程师面试题
2019/04/08 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
Python如何访问字符串中的值
2020/02/09 Python
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
预备党员承诺书
2014/03/25 职场文书
安全目标责任书
2014/07/22 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
2014年路政工作总结
2014/12/10 职场文书
情人节活动总结范文
2015/02/05 职场文书
雨中的树观后感
2015/06/03 职场文书
革命电影观后感
2015/06/18 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书