underscore两个使用方式:

    1. 调用静态方法;
    2. 调用实例方法;
    1. _.unique([1,2,5,6,3,4,5,6,1,2,'A','a'], function(item){
    2. return typeof item === 'string' ? item.toLocaleLowerCase() : item;
    3. }));
    4. _([1,2,5,6,3,4,5,6,1,2,'A','a']).chain().unique(function(item){
    5. return typeof item === 'string' ? item.toLocaleLowerCase() : item;
    6. }).value();
    1. (function(root){
    2. // 构造函数
    3. var _ = function(obj) {
    4. if (!(this instanceof _)){
    5. return new _(obj);
    6. }
    7. this.wrap = obj;
    8. };
    9. _.map = function(arg1, arg2, arg3) {
    10. //console.log(1)
    11. }
    12. // 开启链式调用
    13. _.chain = function(obj){
    14. //特殊的实例对象
    15. var instance = _(obj);
    16. instance._chain = true;
    17. return instance;
    18. }
    19. var result = function(instance, obj) {
    20. if (instance._chain){
    21. instance.wrap = obj;
    22. return instance;
    23. }
    24. return obj;
    25. };
    26. _.max = function(args){
    27. args.push('haha');
    28. return args;
    29. }
    30. _.unique = function(array, callback){
    31. var result = [];
    32. for(var i=0; i < array.length; i++) {
    33. var item = callback ? callback(array[i]) : array[i];
    34. if(result.indexOf(item) === -1) {
    35. result.push(item);
    36. }
    37. }
    38. return result;
    39. }
    40. _.each = function(array, callback){
    41. for(var i=0; i < array.length; i++) {
    42. callback.call(array, array[i]);
    43. }
    44. }
    45. _.functions = function(obj){
    46. var result = [];
    47. for(var key in obj){
    48. result.push(key);
    49. }
    50. return result;
    51. }
    52. _.prototype.value = function(){
    53. return this.wrap;
    54. }
    55. _.mixin = function(obj) {
    56. _.each(_.functions(obj), function(key){
    57. var func = obj[key];
    58. _.prototype[key] = function(){
    59. var args = [this.wrap];
    60. // 数组合并
    61. Array.prototype.push.apply(args, arguments);
    62. // 判断是否是链式调用 this._chain === true
    63. // 数据经过某个工序处理之后的结果
    64. return result(this, func.apply(this, args));
    65. };
    66. });
    67. }
    68. _.mixin(_);
    69. root._ = _;
    70. })(this);
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
    7. <title>Document</title>
    8. <script src="./underscore.js"></script>
    9. </head>
    10. <body>
    11. <script>
    12. // underscore 的两种调用方式
    13. // 1. underscore的静态方法调用
    14. console.log(_.unique([1,2,5,6,3,4,5,6,1,2,'A','a'], function(item){
    15. return typeof item === 'string' ? item.toLocaleLowerCase() : item;
    16. }));
    17. // 2. underscore示例方法的调用
    18. var data = _([1,2,5,6,3,4,5,6,1,2,'A','a']).chain().unique(function(item){
    19. return typeof item === 'string' ? item.toLocaleLowerCase() : item;
    20. }).value();
    21. console.log(data);
    22. </script>
    23. </body>
    24. </html>