微信小程序使用第三方库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 相关文章推荐
jQuery 1.7.2中getAll方法的疑惑分析
May 23 Javascript
window.showModalDialog()返回值的学习心得总结
Jan 07 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
ActiveX控件与Javascript之间的交互示例
Jun 04 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
JQuery Ajax WebService传递参数的简单实例
Nov 02 Javascript
flag和jq on 的绑定多个对象和方法(必看)
Feb 27 Javascript
bootstrap轮播模板使用方法详解
Nov 17 Javascript
微信小程序中进行地图导航功能的实现方法
Jun 29 Javascript
微信小程序实现的自定义分享功能示例
Feb 12 Javascript
Node.js 的 GC 机制详解
Jun 03 Javascript
JS实现公告上线滚动效果
Jan 10 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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
浅谈php提交form表单
2015/07/01 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
2010/07/11 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
node创建Vue项目步骤详解
2020/03/06 Javascript
js实现点赞效果
2020/03/16 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
Python模块学习 datetime介绍
2012/08/27 Python
跟老齐学Python之dict()的操作方法
2014/09/24 Python
Python变量访问权限控制详解
2019/06/29 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
企划主管岗位职责
2013/12/12 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers