我們必須承認本地JavaScript的不完善,正是如此,才有了那麼多完善它的框架,例如jQuery,mootools,prototype等等。今天我們不討論框架,而是來探討一下可以拓展JavaScript功能的額外插件,它們通常是通過拓展類、字元串、日期和對象等實現的。
舉個例子,JavaScript現有的Date函數的局限性就很明顯。而SugarJS增加了40種以上的日期操作函數,以下是其中的一部分:
我們相信本文中提到的三種JS庫將會給您帶來幫助。當然,如果你還知道其他的,歡迎和我們分享。
1.SUGAR
Sugar給我們帶來了一些有用的方法,讓你能夠用更少的代碼完成更多的事。
例:
- getLatestTweets(function(t) {
- var users = t.map('user').unique();
- var total = users.sum('statuses_count').format();
- var top = users.max('followers_count').first();
- var count = top.followers_count.format();
- var since = Date.create(top.created_at);
- return users.length + ' users with a total of ' + total + ' tweets.n' +
- top.screen_name + ' is the top with ' + count + ' followersn' +
- 'and started tweeting ' + since.relative() + '.';
- });
- /*
- Result:
- >20 users with a total of 211,776 tweets.
- TagalogQuotes is the top with 68,554 followers
- and started tweeting 7 months ago.
- */
2.UNDERSCORE.JS
和sugarjs類似,underscore.js提供了許多不拓展內置對象的函數支持。Underscore支持60多個函數,既包括常用函數對象:map,select,invoke——以及更多專業工具:function binding,javascript templating,deep equality testing等等。它委託給內置函數,所以現代瀏覽器通過each,map,reduce,filter,every,some和indexOf實現本地功能運用。
例:
- _.shuffle([1, 2, 3, 4, 5, 6]);
- => [4, 1, 6, 3, 5, 2]
- _.first([5, 4, 3, 2, 1]);
- => 5
- _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
- => [1, 2, 3, 101, 10]
- var func = function(greeting){ return greeting + ': ' + this.name };
- func = _.bind(func, {name : 'moe'}, 'hi');
- func();
- => 'hi: moe'
- var hello = function(name) { return "hello: " + name; };
- hello = _.wrap(hello, function(func) {
- return "before, " + func("moe") + ", after";
- });
- hello();
- => 'before, hello: moe, after'
3.PHP.JS
PHP.JS實現了PHP現有函數的JavaScript版本。作為一個PHP開發人員,我驚訝於它的模仿程度之高。
例:
- function array_merge () {
- var args = Array.prototype.slice.call(arguments),
- argl = args.length,
- arg,
- retObj = {},
- k = '',
- argil = 0,
- j = 0,
- i = 0,
- ct = 0,
- toStr = Object.prototype.toString,
- retArr = true;
- for (i = 0; i < argl; i++) {
- if (toStr.call(args[i]) !== '[object Array]') {
- retArr = false;
- break;
- }
- }
- if (retArr) {
- retArr = [];
- for (i = 0; i < argl; i++) {
- retArr = retArr.concat(args[i]);
- }
- return retArr;
- }
- for (i = 0, ct = 0; i < argl; i++) {
- arg = args[i];
- if (toStr.call(arg) === '[object Array]') {
- for (j = 0, argil = arg.length; j < argil; j++) {
- retObj[ct++] = arg[j];
- }
- }
- else {
- for (k in arg) {
- if (arg.hasOwnProperty(k)) {
- if (parseInt(k, 10) + '' === k) {
- retObj[ct++] = arg[k];
- }
- else {
- retObj[k] = arg[k];
- }
- }
- }
- }
- }
- return retObj;
- }
如果你知道其他好的JS庫的話,請一定記得和大家分享哦。
文章出自:favbulous.com
[火星人 ] 3個增強本地JavaScript功能的JS庫已經有466次圍觀