{"id":1371,"date":"2024-06-02T22:25:11","date_gmt":"2024-06-02T22:25:11","guid":{"rendered":""},"modified":"2024-06-05T03:09:46","modified_gmt":"2024-06-04T19:09:46","slug":"underscore-%e7%b3%bb%e5%88%97%e4%b9%8b%e5%a6%82%e4%bd%95%e5%86%99%e8%87%aa%e5%b7%b1%e7%9a%84-underscore","status":"publish","type":"post","link":"https:\/\/www.lccc.top\/?p=1371","title":{"rendered":"underscore \u7cfb\u5217\u4e4b\u5982\u4f55\u5199\u81ea\u5df1\u7684 underscore"},"content":{"rendered":"<td class=\"d-block comment-body markdown-body  js-comment-body\">\n<h2 dir=\"auto\">\u524d\u8a00<\/h2>\n<p dir=\"auto\">\u5728 <a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/53\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/53\/hovercard\">\u300aJavaScript \u4e13\u9898\u7cfb\u5217\u300b<\/a> \u4e2d\uff0c\u6211\u4eec\u5199\u4e86\u5f88\u591a\u7684\u529f\u80fd\u51fd\u6570\uff0c\u6bd4\u5982\u9632\u6296\u3001\u8282\u6d41\u3001\u53bb\u91cd\u3001\u7c7b\u578b\u5224\u65ad\u3001\u6241\u5e73\u6570\u7ec4\u3001\u6df1\u6d45\u62f7\u8d1d\u3001\u67e5\u627e\u6570\u7ec4\u5143\u7d20\u3001\u901a\u7528\u904d\u5386\u3001\u67ef\u91cc\u5316\u3001\u51fd\u6570\u7ec4\u5408\u3001\u51fd\u6570\u8bb0\u5fc6\u3001\u4e71\u5e8f\u7b49\uff0c\u53ef\u4ee5\u6211\u4eec\u8be5\u5982\u4f55\u7ec4\u7ec7\u8fd9\u4e9b\u51fd\u6570\uff0c\u5f62\u6210\u81ea\u5df1\u7684\u4e00\u4e2a\u5de5\u5177\u51fd\u6570\u5e93\u5462\uff1f\u8fd9\u4e2a\u65f6\u5019\uff0c\u6211\u4eec\u5c31\u8981\u501f\u9274 underscore \u662f\u600e\u4e48\u505a\u7684\u4e86\u3002<\/p>\n<h2 dir=\"auto\">\u81ea\u5df1\u5b9e\u73b0<\/h2>\n<p dir=\"auto\">\u5982\u679c\u662f\u6211\u4eec\u81ea\u5df1\u53bb\u7ec4\u7ec7\u8fd9\u4e9b\u51fd\u6570\uff0c\u6211\u4eec\u8be5\u600e\u4e48\u505a\u5462\uff1f\u6211\u60f3\u6211\u4f1a\u8fd9\u6837\u505a\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"(function(){\n    var root = this;\n\n    var _ = {};\n\n    root._ = _;\n\n    \/\/ \u5728\u8fd9\u91cc\u6dfb\u52a0\u81ea\u5df1\u7684\u65b9\u6cd5\n    _.reverse = function(string){\n        return string.split('').reverse().join('');\n    }\n\n})()\n\n_.reverse('hello');\n=&gt; 'olleh'\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">root<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-s1\">root<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-c\">\/\/ \u5728\u8fd9\u91cc\u6dfb\u52a0\u81ea\u5df1\u7684\u65b9\u6cd5<\/span>\n    <span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">reverse<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">string<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">string<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">split<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">''<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">reverse<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">join<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">''<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n\n<span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">reverse<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'hello'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-s\">'olleh'<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u6211\u4eec\u5c06\u6240\u6709\u7684\u65b9\u6cd5\u6dfb\u52a0\u5230\u4e00\u4e2a\u540d\u4e3a <code class=\"notranslate\">_<\/code> \u7684\u5bf9\u8c61\u4e0a\uff0c\u7136\u540e\u5c06\u8be5\u5bf9\u8c61\u6302\u8f7d\u5230\u5168\u5c40\u5bf9\u8c61\u4e0a\u3002<\/p>\n<p dir=\"auto\">\u4e4b\u6240\u4ee5\u4e0d\u76f4\u63a5 <code class=\"notranslate\">window._ = _<\/code> \u662f\u56e0\u4e3a\u6211\u4eec\u5199\u7684\u662f\u4e00\u4e2a\u5de5\u5177\u51fd\u6570\u5e93\uff0c\u4e0d\u4ec5\u8981\u6c42\u53ef\u4ee5\u8fd0\u884c\u5728\u6d4f\u89c8\u5668\u7aef\uff0c\u8fd8\u53ef\u4ee5\u8fd0\u884c\u5728\u8bf8\u5982 Node \u7b49\u73af\u5883\u4e2d\u3002<\/p>\n<h2 dir=\"auto\">root<\/h2>\n<p dir=\"auto\">\u7136\u800c underscore \u53ef\u4e0d\u4f1a\u5199\u5f97\u5982\u6b64\u7b80\u5355\uff0c\u6211\u4eec\u4ece <code class=\"notranslate\">var root = this<\/code> \u5f00\u59cb\u8bf4\u8d77\u3002<\/p>\n<p dir=\"auto\">\u4e4b\u6240\u4ee5\u5199\u8fd9\u4e00\u53e5\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u8981\u901a\u8fc7 this \u83b7\u5f97\u5168\u5c40\u5bf9\u8c61\uff0c\u7136\u540e\u5c06 <code class=\"notranslate\">_<\/code> \u5bf9\u8c61\uff0c\u6302\u8f7d\u4e0a\u53bb\u3002<\/p>\n<p dir=\"auto\">\u7136\u800c\u5728\u4e25\u683c\u6a21\u5f0f\u4e0b\uff0cthis \u8fd4\u56de undefined\uff0c\u800c\u4e0d\u662f\u6307\u5411 Window\uff0c\u5e78\u8fd0\u7684\u662f underscore \u5e76\u6ca1\u6709\u91c7\u7528\u4e25\u683c\u6a21\u5f0f\uff0c\u53ef\u662f\u5373\u4fbf\u5982\u6b64\uff0c\u4e5f\u4e0d\u80fd\u907f\u514d\uff0c\u56e0\u4e3a\u5728 ES6 \u4e2d\u6a21\u5757\u811a\u672c\u81ea\u52a8\u91c7\u7528\u4e25\u683c\u6a21\u5f0f\uff0c\u4e0d\u7ba1\u6709\u6ca1\u6709\u58f0\u660e <code class=\"notranslate\">use strict<\/code>\u3002<\/p>\n<p dir=\"auto\">\u5982\u679c this \u8fd4\u56de undefined\uff0c\u4ee3\u7801\u5c31\u4f1a\u62a5\u9519\uff0c\u6240\u4ee5\u6211\u4eec\u7684\u601d\u8def\u662f\u5bf9\u73af\u5883\u8fdb\u884c\u68c0\u6d4b\uff0c\u7136\u540e\u6302\u8f7d\u5230\u6b63\u786e\u7684\u5bf9\u8c61\u4e0a\u3002\u6211\u4eec\u4fee\u6539\u4e00\u4e0b\u4ee3\u7801\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var root = (typeof window == 'object' &amp;&amp; window.window == window &amp;&amp; window) ||\n           (typeof global == 'object' &amp;&amp; global.global == global &amp;&amp; global);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">root<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-smi\">window<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-smi\">window<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">window<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-smi\">window<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-smi\">window<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u5728\u8fd9\u6bb5\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u5224\u65ad\u4e86\u6d4f\u89c8\u5668\u548c Node \u73af\u5883\uff0c\u53ef\u662f\u53ea\u6709\u8fd9\u4e24\u4e2a\u73af\u5883\u5417\uff1f\u90a3\u6211\u4eec\u6765\u770b\u770b Web Worker\u3002<\/p>\n<h2 dir=\"auto\">Web Worker<\/h2>\n<p dir=\"auto\">Web Worker \u5c5e\u4e8e HTML5 \u4e2d\u7684\u5185\u5bb9\uff0c\u5f15\u7528\u300aJavaScript\u6743\u5a01\u6307\u5357\u300b\u4e2d\u7684\u8bdd\u5c31\u662f\uff1a<\/p>\n<blockquote>\n<p dir=\"auto\">\u5728 Web Worker \u6807\u51c6\u4e2d\uff0c\u5b9a\u4e49\u4e86\u89e3\u51b3\u5ba2\u6237\u7aef JavaScript \u65e0\u6cd5\u591a\u7ebf\u7a0b\u7684\u95ee\u9898\u3002\u5176\u4e2d\u5b9a\u4e49\u7684 \u201cworker\u201d \u662f\u6307\u6267\u884c\u4ee3\u7801\u7684\u5e76\u884c\u8fc7\u7a0b\u3002\u4e0d\u8fc7\uff0cWeb Worker \u5904\u5728\u4e00\u4e2a\u81ea\u5305\u542b\u7684\u6267\u884c\u73af\u5883\u4e2d\uff0c\u65e0\u6cd5\u8bbf\u95ee Window \u5bf9\u8c61\u548c Document \u5bf9\u8c61\uff0c\u548c\u4e3b\u7ebf\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1\u4e1a\u53ea\u80fd\u901a\u8fc7\u5f02\u6b65\u6d88\u606f\u4f20\u9012\u673a\u5236\u6765\u5b9e\u73b0\u3002<\/p>\n<\/blockquote>\n<p dir=\"auto\">\u4e3a\u4e86\u6f14\u793a Web Worker \u7684\u6548\u679c\uff0c\u6211\u5199\u4e86\u4e00\u4e2a demo\uff0c<a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/tree\/master\/demos\/web-worker\">\u67e5\u770b\u4ee3\u7801<\/a>\u3002<\/p>\n<p dir=\"auto\">\u5728 Web Worker \u4e2d\uff0c\u662f\u65e0\u6cd5\u8bbf\u95ee Window \u5bf9\u8c61\u7684\uff0c\u6240\u4ee5 <code class=\"notranslate\">typeof window<\/code> \u548c <code class=\"notranslate\">typeof global<\/code> \u7684\u7ed3\u679c\u90fd\u662f <code class=\"notranslate\">undefined<\/code>\uff0c\u6240\u4ee5\u6700\u7ec8 root \u7684\u503c\u4e3a false\uff0c\u5c06\u4e00\u4e2a\u57fa\u672c\u7c7b\u578b\u7684\u503c\u50cf\u5bf9\u8c61\u4e00\u6837\u6dfb\u52a0\u5c5e\u6027\u548c\u65b9\u6cd5\uff0c\u81ea\u7136\u662f\u4f1a\u62a5\u9519\u7684\u3002<\/p>\n<p dir=\"auto\">\u90a3\u4e48\u6211\u4eec\u8be5\u600e\u4e48\u529e\u5462\uff1f<\/p>\n<p dir=\"auto\">\u867d\u7136\u5728 Web Worker \u4e2d\u4e0d\u80fd\u8bbf\u95ee\u5230 Window \u5bf9\u8c61\uff0c\u4f46\u662f\u6211\u4eec\u5374\u80fd\u901a\u8fc7 self \u8bbf\u95ee\u5230 Worker \u73af\u5883\u4e2d\u7684\u5168\u5c40\u5bf9\u8c61\u3002\u6211\u4eec\u53ea\u662f\u8981\u627e\u5168\u5c40\u53d8\u91cf\u6302\u8f7d\u800c\u5df2\uff0c\u6240\u4ee5\u5b8c\u5168\u53ef\u4ee5\u6302\u5230 self \u4e2d\u561b\u3002<\/p>\n<p dir=\"auto\">\u800c\u4e14\u5728\u6d4f\u89c8\u5668\u4e2d\uff0c\u9664\u4e86 window \u5c5e\u6027\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u901a\u8fc7 self \u5c5e\u6027\u76f4\u63a5\u8bbf\u95ee\u5230 Winow \u5bf9\u8c61\u3002<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"console.log(window.window === window); \/\/ true\nconsole.log(window.self === window); \/\/ true\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">window<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">window<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-smi\">window<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ true<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">window<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">self<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-smi\">window<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ true<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u8003\u8651\u5230\u4f7f\u7528 self \u8fd8\u53ef\u4ee5\u989d\u5916\u652f\u6301 Web Worker\uff0c\u6211\u4eec\u76f4\u63a5\u5c06\u4ee3\u7801\u6539\u6210 self\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var root = (typeof self == 'object' &amp;&amp; self.self == self &amp;&amp; self) ||\n           (typeof global == 'object' &amp;&amp; global.global == global &amp;&amp; global);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">root<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">node vm<\/h2>\n<p dir=\"auto\">\u5230\u4e86\u8fd9\u91cc\uff0c\u4f9d\u7136\u6ca1\u5b8c\uff0c\u8ba9\u4f60\u60f3\u4e0d\u5230\u7684\u662f\uff0c\u5728 node \u7684 vm \u6a21\u5757\u4e2d\uff0c\u4e5f\u5c31\u662f\u6c99\u76d2\u6a21\u5757\uff0crunInContext \u65b9\u6cd5\u4e2d\uff0c\u662f\u4e0d\u5b58\u5728 window\uff0c\u4e5f\u4e0d\u5b58\u5728 global \u53d8\u91cf\u7684\uff0c<a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/blob\/master\/demos\/node-vm\/index.js\">\u67e5\u770b\u4ee3\u7801<\/a>\u3002<\/p>\n<p dir=\"auto\">\u4f46\u662f\u6211\u4eec\u5374\u53ef\u4ee5\u901a\u8fc7 this \u8bbf\u95ee\u5230\u5168\u5c40\u5bf9\u8c61\uff0c\u6240\u4ee5\u5c31\u6709\u4eba\u53d1\u8d77\u4e86\u4e00\u4e2a PR\uff0c\u4ee3\u7801\u6539\u6210\u4e86\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var root = (typeof self == 'object' &amp;&amp; self.self == self &amp;&amp; self) ||\n           (typeof global == 'object' &amp;&amp; global.global == global &amp;&amp; global) ||\n           this;\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">root<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">\u5fae\u4fe1\u5c0f\u7a0b\u5e8f<\/h2>\n<p dir=\"auto\">\u5230\u4e86\u8fd9\u91cc\uff0c\u8fd8\u662f\u6ca1\u5b8c\uff0c\u8f6e\u5230\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u767b\u573a\u4e86\u3002<\/p>\n<p dir=\"auto\">\u56e0\u4e3a\u5728\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e2d\uff0cwindow \u548c global \u90fd\u662f undefined\uff0c\u52a0\u4e0a\u53c8\u5f3a\u5236\u4f7f\u7528\u4e25\u683c\u6a21\u5f0f\uff0cthis \u4e3a undefined\uff0c\u6302\u8f7d\u5c31\u4f1a\u53d1\u751f\u9519\u8bef\uff0c\u6240\u4ee5\u5c31\u6709\u4eba\u53c8\u53d1\u4e86\u4e00\u4e2a PR\uff0c\u4ee3\u7801\u53d8\u6210\u4e86\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var root = (typeof self == 'object' &amp;&amp; self.self == self &amp;&amp; self) ||\n           (typeof global == 'object' &amp;&amp; global.global == global &amp;&amp; global) ||\n           this ||\n           {};\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">root<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-smi\">this<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u8fd9\u5c31\u662f\u73b0\u5728 v1.8.3 \u7684\u6837\u5b50\u3002<\/p>\n<p dir=\"auto\">\u867d\u7136\u4f5c\u8005\u53ef\u4ee5\u76f4\u63a5\u8bb2\u89e3\u6700\u7ec8\u7684\u4ee3\u7801\uff0c\u4f46\u662f\u4f5c\u8005\u66f4\u5e0c\u671b\u5e26\u7740\u5927\u5bb6\u770b\u770b\u8fd9\u770b\u4f3c\u666e\u901a\u7684\u4ee3\u7801\u662f\u5982\u4f55\u4e00\u6b65\u6b65\u6f14\u53d8\u6210\u8fd9\u6837\u7684\uff0c\u4e5f\u5e0c\u671b\u544a\u8bc9\u5927\u5bb6\uff0c\u4ee3\u7801\u7684\u5065\u58ee\u6027\uff0c\u5e76\u975e\u4e00\u8e74\u800c\u5c31\uff0c\u800c\u662f\u6c47\u96c6\u4e86\u5f88\u591a\u4eba\u7684\u7ecf\u9a8c\uff0c\u8003\u8651\u5230\u4e86\u5f88\u591a\u6211\u4eec\u610f\u60f3\u4e0d\u5230\u7684\u5730\u65b9\uff0c\u8fd9\u4e5f\u662f\u5f00\u6e90\u9879\u76ee\u7684\u597d\u5904\u5427\u3002<\/p>\n<h2 dir=\"auto\">\u51fd\u6570\u5bf9\u8c61<\/h2>\n<p dir=\"auto\">\u73b0\u5728\u6211\u4eec\u8bb2\u7b2c\u4e8c\u53e5 <code class=\"notranslate\">var _ = {};<\/code>\u3002<\/p>\n<p dir=\"auto\">\u5982\u679c\u4ec5\u4ec5\u8bbe\u7f6e _ \u4e3a\u4e00\u4e2a\u7a7a\u5bf9\u8c61\uff0c\u6211\u4eec\u8c03\u7528\u65b9\u6cd5\u7684\u65f6\u5019\uff0c\u53ea\u80fd\u4f7f\u7528 <code class=\"notranslate\">_.reverse('hello')<\/code> \u7684\u65b9\u5f0f\uff0c\u5b9e\u9645\u4e0a\uff0cunderscore \u4e5f\u652f\u6301\u7c7b\u4f3c\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u5f0f\u8c03\u7528\uff0c\u5373\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"_('hello').reverse(); \/\/ 'olleh'\">\n<pre class=\"notranslate\"><span class=\"pl-en\">_<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'hello'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">reverse<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ 'olleh'<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u518d\u4e3e\u4e2a\u4f8b\u5b50\u6bd4\u8f83\u4e0b\u4e24\u79cd\u8c03\u7528\u65b9\u5f0f\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u51fd\u6570\u5f0f\u98ce\u683c\n_.each([1, 2, 3], function(item){\n    console.log(item)\n});\n\n\/\/ \u9762\u5411\u5bf9\u8c61\u98ce\u683c\n_([1, 2, 3]).each(function(item){\n    console.log(item)\n});\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u51fd\u6570\u5f0f\u98ce\u683c<\/span>\n<span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">each<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">3<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">item<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">item<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ \u9762\u5411\u5bf9\u8c61\u98ce\u683c<\/span>\n<span class=\"pl-en\">_<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">3<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">each<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">item<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">item<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u53ef\u662f\u8be5\u5982\u4f55\u5b9e\u73b0\u5462\uff1f<\/p>\n<p dir=\"auto\">\u65e2\u7136\u4ee5 <code class=\"notranslate\">_([1, 2, 3])<\/code> \u7684\u5f62\u5f0f\u53ef\u4ee5\u6267\u884c\uff0c\u5c31\u8868\u660e <code class=\"notranslate\">_<\/code> \u4e0d\u662f\u4e00\u4e2a\u5b57\u9762\u91cf\u5bf9\u8c61\uff0c\u800c\u662f\u4e00\u4e2a\u51fd\u6570\uff01<\/p>\n<p dir=\"auto\">\u5e78\u8fd0\u7684\u662f\uff0c\u5728 JavaScript \u4e2d\uff0c\u51fd\u6570\u4e5f\u662f\u4e00\u79cd\u5bf9\u8c61\uff0c\u6211\u4eec\u4e3e\u4e2a\u4f8b\u5b50\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var _ = function() {};\n_.value = 1;\n_.log = function() { return this.value + 1 };\n\nconsole.log(_.value); \/\/ 1\nconsole.log(_.log()); \/\/ 2\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-en\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span> <span class=\"pl-k\">return<\/span> <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span> <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ 1<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ 2<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u5c06\u81ea\u5b9a\u4e49\u7684\u51fd\u6570\u5b9a\u4e49\u5728 <code class=\"notranslate\">_<\/code> \u51fd\u6570\u4e0a\uff01<\/p>\n<p dir=\"auto\">\u76ee\u524d\u7684\u5199\u6cd5\u4e3a\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var root = (typeof self == 'object' &amp;&amp; self.self == self &amp;&amp; self) ||\n           (typeof global == 'object' &amp;&amp; global.global == global &amp;&amp; global) ||\n           this ||\n           {};\n\nvar _ = function() {}\n\nroot._ = _;\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">root<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-smi\">this<\/span> <span class=\"pl-c1\">||<\/span>\n           <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-en\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-s1\">root<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u5982\u4f55\u505a\u5230 <code class=\"notranslate\">_([1, 2, 3]).each(...)<\/code>\u5462\uff1f\u5373 _ \u51fd\u6570\u8fd4\u56de\u4e00\u4e2a\u5bf9\u8c61\uff0c\u8fd9\u4e2a\u5bf9\u8c61\uff0c\u5982\u4f55\u8c03\u7528\u6302\u5728 _ \u51fd\u6570\u4e0a\u7684\u65b9\u6cd5\u5462\uff1f<\/p>\n<p dir=\"auto\">\u6211\u4eec\u770b\u770b underscore \u662f\u5982\u4f55\u5b9e\u73b0\u7684\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var _ = function(obj) {\n    if (!(this instanceof _)) return new _(obj);\n    this._wrapped = obj;\n};\n\n_([1, 2, 3]);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-en\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">!<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span> <span class=\"pl-k\">instanceof<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_wrapped<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-en\">_<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">3<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u6211\u4eec\u5206\u6790\u4e0b <code class=\"notranslate\">_([1, 2, 3])<\/code> \u7684\u6267\u884c\u8fc7\u7a0b\uff1a<\/p>\n<ol dir=\"auto\">\n<li>\u6267\u884c <code class=\"notranslate\">this instanceof _<\/code>\uff0cthis \u6307\u5411 window \uff0c<code class=\"notranslate\">window instanceof _<\/code> \u4e3a false\uff0c<code class=\"notranslate\">!<\/code>\u64cd\u4f5c\u7b26\u53d6\u53cd\uff0c\u6240\u4ee5\u6267\u884c <code class=\"notranslate\">new _(obj)<\/code>\u3002<\/li>\n<li><code class=\"notranslate\">new _(obj)<\/code> \u4e2d\uff0cthis \u6307\u5411\u5b9e\u4f8b\u5bf9\u8c61\uff0c<code class=\"notranslate\">this instanceof _<\/code> \u4e3a true\uff0c\u53d6\u53cd\u540e\uff0c\u4ee3\u7801\u63a5\u7740\u6267\u884c<\/li>\n<li>\u6267\u884c <code class=\"notranslate\">this._wrapped = obj<\/code>\uff0c \u51fd\u6570\u6267\u884c\u7ed3\u675f<\/li>\n<li>\u603b\u7ed3\uff0c<code class=\"notranslate\">_([1, 2, 3])<\/code> \u8fd4\u56de\u4e00\u4e2a\u5bf9\u8c61\uff0c\u4e3a <code class=\"notranslate\">{_wrapped: [1, 2, 3]}<\/code>\uff0c\u8be5\u5bf9\u8c61\u7684\u539f\u578b\u6307\u5411 _.prototype<\/li>\n<\/ol>\n<p dir=\"auto\">\u793a\u610f\u56fe\u5982\u4e0b\uff1a<\/p>\n<p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"\/\/www.lccc.top\/wp-content\/uploads\/pic\/mqyqingfen\/94bf353e9462642006469192bbf1ffad00a92704.jpg\"><img decoding=\"async\" src=\"\/\/www.lccc.top\/wp-content\/uploads\/pic\/mqyqingfen\/94bf353e9462642006469192bbf1ffad00a92704.jpg\" alt=\"_()\u793a\u610f\u56fe\" data-canonical-src=\"https:\/\/cdn.jsdelivr.net\/gh\/mqyqingfeng\/Blog\/Images\/underscore\/new-obj.png\" style=\"max-width: 100%;\"><\/a><\/p>\n<p dir=\"auto\">\u7136\u540e\u95ee\u9898\u6765\u4e86\uff0c\u6211\u4eec\u662f\u5c06\u65b9\u6cd5\u6302\u8f7d\u5230 _ \u51fd\u6570\u5bf9\u8c61\u4e0a\uff0c\u5e76\u6ca1\u6709\u6302\u5230\u51fd\u6570\u7684\u539f\u578b\u4e0a\u5450\uff0c\u6240\u4ee5\u8fd4\u56de\u4e86\u7684\u5b9e\u4f8b\uff0c\u5176\u5b9e\u662f\u65e0\u6cd5\u8c03\u7528 _ \u51fd\u6570\u5bf9\u8c61\u4e0a\u7684\u65b9\u6cd5\u7684\uff01<\/p>\n<p dir=\"auto\">\u6211\u4eec\u5199\u4e2a\u4f8b\u5b50\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"(function(){\n    var root = (typeof self == 'object' &amp;&amp; self.self == self &amp;&amp; self) ||\n               (typeof global == 'object' &amp;&amp; global.global == global &amp;&amp; global) ||\n               this ||\n               {};\n\n    var _ = function(obj) {\n        if (!(this instanceof _)) return new _(obj);\n        this._wrapped = obj;\n    }\n\n    root._ = _;\n\n    _.log = function(){\n        console.log(1)\n    }\n\n})()\n\n_().log(); \/\/ _(...).log is not a function\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">root<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n               <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n               <span class=\"pl-smi\">this<\/span> <span class=\"pl-c1\">||<\/span>\n               <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-en\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">!<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span> <span class=\"pl-k\">instanceof<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_wrapped<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n\n    <span class=\"pl-s1\">root<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span>\n    <span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n\n<span class=\"pl-en\">_<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ _(...).log is not a function<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u786e\u5b9e\u6709\u8fd9\u4e2a\u95ee\u9898\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e2a\u65b9\u6cd5\u5c06 _ \u4e0a\u7684\u65b9\u6cd5\u590d\u5236\u5230 <code class=\"notranslate\">_.prototype<\/code> \u4e0a\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u5c31\u662f <code class=\"notranslate\">_.mixin<\/code>\u3002<\/p>\n<h2 dir=\"auto\">_.functions<\/h2>\n<p dir=\"auto\">\u4e3a\u4e86\u5c06 _ \u4e0a\u7684\u65b9\u6cd5\u590d\u5236\u5230\u539f\u578b\u4e0a\uff0c\u9996\u5148\u6211\u4eec\u8981\u83b7\u5f97 _ \u4e0a\u7684\u65b9\u6cd5\uff0c\u6240\u4ee5\u6211\u4eec\u5148\u5199\u4e2a <code class=\"notranslate\">_.functions<\/code> \u65b9\u6cd5\u3002<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"_.functions = function(obj) {\n    var names = [];\n    for (var key in obj) {\n        if (_.isFunction(obj[key])) names.push(key);\n    }\n    return names.sort();\n};\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">functions<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">names<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">key<\/span> <span class=\"pl-k\">in<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">isFunction<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-s1\">names<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">push<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">names<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">sort<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">isFunction \u51fd\u6570\u53ef\u4ee5\u53c2\u8003 <a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/28\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/28\/hovercard\">\u300aJavaScript\u4e13\u9898\u4e4b\u7c7b\u578b\u5224\u65ad(\u4e0b)\u300b<\/a><\/p>\n<h2 dir=\"auto\">mixin<\/h2>\n<p dir=\"auto\">\u73b0\u5728\u6211\u4eec\u53ef\u4ee5\u5199 mixin \u65b9\u6cd5\u4e86\u3002<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var ArrayProto = Array.prototype;\nvar push = ArrayProto.push;\n\n_.mixin = function(obj) {\n    _.each(_.functions(obj), function(name) {\n        var func = _[name] = obj[name];\n        _.prototype[name] = function() {\n            var args = [this._wrapped];\n            push.apply(args, arguments);\n            return func.apply(_, args);\n        };\n    });\n    return _;\n};\n\n_.mixin(_);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-v\">ArrayProto<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Array<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prototype<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">push<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">ArrayProto<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">push<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">mixin<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">each<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">functions<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">func<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prototype<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">args<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_wrapped<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-s1\">push<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">args<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">func<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">args<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">mixin<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">each \u65b9\u6cd5\u53ef\u4ee5\u53c2\u8003 <a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/40\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/40\/hovercard\">\u300aJavaScript\u4e13\u9898jQuery\u901a\u7528\u904d\u5386\u65b9\u6cd5each\u7684\u5b9e\u73b0\u300b<\/a><\/p>\n<p dir=\"auto\">\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff1a\u56e0\u4e3a <code class=\"notranslate\">_[name] = obj[name]<\/code> \u7684\u7f18\u6545\uff0c\u6211\u4eec\u53ef\u4ee5\u7ed9 underscore \u62d3\u5c55\u81ea\u5b9a\u4e49\u7684\u65b9\u6cd5:<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"_.mixin({\n  addOne: function(num) {\n    return num + 1;\n  }\n});\n\n_(2).addOne(); \/\/ 3\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">mixin<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-en\">addOne<\/span>: <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">num<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">num<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-en\">_<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">addOne<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ 3<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u81f3\u6b64\uff0c\u6211\u4eec\u7b97\u662f\u5b9e\u73b0\u4e86\u540c\u65f6\u652f\u6301\u9762\u5411\u5bf9\u8c61\u98ce\u683c\u548c\u51fd\u6570\u98ce\u683c\u3002<\/p>\n<h2 dir=\"auto\">\u5bfc\u51fa<\/h2>\n<p dir=\"auto\">\u7ec8\u4e8e\u5230\u4e86\u8bb2\u6700\u540e\u4e00\u6b65 <code class=\"notranslate\">root._ = _<\/code>\uff0c\u6211\u4eec\u76f4\u63a5\u770b\u6e90\u7801\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"if (typeof exports != 'undefined' &amp;&amp; !exports.nodeType) {\n    if (typeof module != 'undefined' &amp;&amp; !module.nodeType &amp;&amp; module.exports) {\n        exports = module.exports = _;\n    }\n    exports._ = _;\n} else {\n    root._ = _;\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">exports<\/span> <span class=\"pl-c1\">!=<\/span> <span class=\"pl-s\">'undefined'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-c1\">!<\/span><span class=\"pl-s1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">nodeType<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-smi\">module<\/span> <span class=\"pl-c1\">!=<\/span> <span class=\"pl-s\">'undefined'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-c1\">!<\/span><span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">nodeType<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">exports<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-s1\">exports<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">exports<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n    <span class=\"pl-s1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-s1\">root<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">_<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u4e3a\u4e86\u652f\u6301\u6a21\u5757\u5316\uff0c\u6211\u4eec\u9700\u8981\u5c06 _ \u5728\u5408\u9002\u7684\u73af\u5883\u4e2d\u4f5c\u4e3a\u6a21\u5757\u5bfc\u51fa\uff0c\u4f46\u662f nodejs \u6a21\u5757\u7684 API \u66fe\u7ecf\u53d1\u751f\u8fc7\u6539\u53d8\uff0c\u6bd4\u5982\u5728\u65e9\u671f\u7248\u672c\u4e2d\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ add.js\nexports.addOne = function(num) {\n  return num + 1\n}\n\n\/\/ index.js\nvar add = require('.\/add');\nadd.addOne(2);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ add.js<\/span>\n<span class=\"pl-s1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">addOne<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">num<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">num<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ index.js<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">add<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">require<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'.\/add'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-s1\">add<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">addOne<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u5728\u65b0\u7248\u672c\u4e2d\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ add.js\nmodule.exports = function(1){\n    return num + 1\n}\n\n\/\/ index.js\nvar addOne = require('.\/add.js')\naddOne(2)\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ add.js<\/span>\n<span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">exports<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">num<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ index.js<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">addOne<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">require<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'.\/add.js'<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-s1\">addOne<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">)<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u6240\u4ee5\u6211\u4eec\u6839\u636e exports \u548c module \u662f\u5426\u5b58\u5728\u6765\u9009\u62e9\u4e0d\u540c\u7684\u5bfc\u51fa\u65b9\u5f0f\uff0c\u90a3\u4e3a\u4ec0\u4e48\u5728\u65b0\u7248\u672c\u4e2d\uff0c\u6211\u4eec\u8fd8\u8981\u4f7f\u7528 <code class=\"notranslate\">exports = module.exports = _<\/code> \u5462\uff1f<\/p>\n<p dir=\"auto\">\u8fd9\u662f\u56e0\u4e3a\u5728 nodejs \u4e2d\uff0cexports \u662f module.exports \u7684\u4e00\u4e2a\u5f15\u7528\uff0c\u5f53\u4f60\u4f7f\u7528\u4e86 module.exports = function(){}\uff0c\u5b9e\u9645\u4e0a\u8986\u76d6\u4e86 module.exports\uff0c\u4f46\u662f exports \u5e76\u672a\u53d1\u751f\u6539\u53d8\uff0c\u4e3a\u4e86\u907f\u514d\u540e\u9762\u518d\u4fee\u6539 exports \u800c\u5bfc\u81f4\u4e0d\u80fd\u6b63\u786e\u8f93\u51fa\uff0c\u5c31\u5199\u6210\u8fd9\u6837\uff0c\u5c06\u4e24\u8005\u4fdd\u6301\u7edf\u4e00\u3002<\/p>\n<p dir=\"auto\">\u5199\u4e2a demo \u5427\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ exports \u662f module.exports \u7684\u4e00\u4e2a\u5f15\u7528\nmodule.exports.num = '1'\n\nconsole.log(exports.num) \/\/ 1\n\nexports.num = '2'\n\nconsole.log(module.exports.num) \/\/ 2\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ exports \u662f module.exports \u7684\u4e00\u4e2a\u5f15\u7528<\/span>\n<span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">num<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'1'<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">num<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c\">\/\/ 1<\/span>\n\n<span class=\"pl-s1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">num<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'2'<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">num<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c\">\/\/ 2<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ addOne.js\nmodule.exports = function(num){\n    return num + 1\n}\n\nexports.num = '3'\n\n\/\/ result.js \u4e2d\u5f15\u5165 addOne.js\nvar addOne = require('.\/addOne.js');\n\nconsole.log(addOne(1)) \/\/ 2\nconsole.log(addOne.num) \/\/ undefined\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ addOne.js<\/span>\n<span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">exports<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">num<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">num<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-s1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">num<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'3'<\/span>\n\n<span class=\"pl-c\">\/\/ result.js \u4e2d\u5f15\u5165 addOne.js<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">addOne<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">require<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'.\/addOne.js'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">addOne<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c\">\/\/ 2<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">addOne<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">num<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c\">\/\/ undefined<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ addOne.js\nexports = module.exports = function(num){\n    return num + 1\n}\n\nexports.num = '3'\n\n\/\/ result.js \u4e2d\u5f15\u5165 addOne.js\nvar addOne = require('.\/addOne.js');\n\nconsole.log(addOne(1)) \/\/ 2\nconsole.log(addOne.num) \/\/ 3\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ addOne.js<\/span>\n<span class=\"pl-s1\">exports<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">exports<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">num<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">num<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-s1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">num<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'3'<\/span>\n\n<span class=\"pl-c\">\/\/ result.js \u4e2d\u5f15\u5165 addOne.js<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">addOne<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">require<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'.\/addOne.js'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">addOne<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c\">\/\/ 2<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">addOne<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">num<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c\">\/\/ 3<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u6700\u540e\u4e3a\u4ec0\u4e48\u8981\u8fdb\u884c\u4e00\u4e2a exports.nodeType \u5224\u65ad\u5462\uff1f\u8fd9\u662f\u56e0\u4e3a\u5982\u679c\u4f60\u5728 HTML \u9875\u9762\u4e2d\u52a0\u5165\u4e00\u4e2a id \u4e3a exports \u7684\u5143\u7d20\uff0c\u6bd4\u5982<\/p>\n<div class=\"highlight highlight-text-html-basic notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='&lt;div id=\"exports\"&gt;&lt;\/div&gt;'>\n<pre class=\"notranslate\"><span class=\"pl-kos\">&lt;<\/span><span class=\"pl-ent\">div<\/span> <span class=\"pl-c1\">id<\/span>=\"<span class=\"pl-s\">exports<\/span>\"<span class=\"pl-kos\">&gt;<\/span><span class=\"pl-kos\">&lt;\/<\/span><span class=\"pl-ent\">div<\/span><span class=\"pl-kos\">&gt;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u5c31\u4f1a\u751f\u6210\u4e00\u4e2a window.exports \u5168\u5c40\u53d8\u91cf\uff0c\u4f60\u53ef\u4ee5\u76f4\u63a5\u5728\u6d4f\u89c8\u5668\u547d\u4ee4\u884c\u4e2d\u6253\u5370\u8be5\u53d8\u91cf\u3002<\/p>\n<p dir=\"auto\">\u6b64\u65f6\u5728\u6d4f\u89c8\u5668\u4e2d\uff0c<code class=\"notranslate\">typeof exports != 'undefined'<\/code> \u7684\u5224\u65ad\u5c31\u4f1a\u751f\u6548\uff0c\u7136\u540e <code class=\"notranslate\">exports._ = _<\/code>\uff0c\u7136\u800c\u5728\u6d4f\u89c8\u5668\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u5c06 _ \u6302\u8f7d\u5230\u5168\u5c40\u53d8\u91cf\u4e0a\u5450\uff0c\u6240\u4ee5\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u8fdb\u884c\u4e00\u4e2a\u662f\u5426\u662f DOM \u8282\u70b9\u7684\u5224\u65ad\u3002<\/p>\n<h2 dir=\"auto\">\u6e90\u7801<\/h2>\n<p dir=\"auto\">\u6700\u7ec8\u7684\u4ee3\u7801\u5982\u4e0b\uff0c\u6709\u4e86\u8fd9\u4e2a\u57fa\u672c\u7ed3\u6784\uff0c\u4f60\u53ef\u4ee5\u81ea\u7531\u6dfb\u52a0\u4f60\u9700\u8981\u4f7f\u7528\u5230\u7684\u51fd\u6570\u4e86\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"(function() {\n\n    var root = (typeof self == 'object' &amp;&amp; self.self == self &amp;&amp; self) ||\n        (typeof global == 'object' &amp;&amp; global.global == global &amp;&amp; global) ||\n        this || {};\n\n    var ArrayProto = Array.prototype;\n\n    var push = ArrayProto.push;\n\n    var _ = function(obj) {\n        if (obj instanceof _) return obj;\n        if (!(this instanceof _)) return new _(obj);\n        this._wrapped = obj;\n    };\n\n    if (typeof exports != 'undefined' &amp;&amp; !exports.nodeType) {\n        if (typeof module != 'undefined' &amp;&amp; !module.nodeType &amp;&amp; module.exports) {\n            exports = module.exports = _;\n        }\n        exports._ = _;\n    } else {\n        root._ = _;\n    }\n\n    _.VERSION = '0.1';\n\n    var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n    var isArrayLike = function(collection) {\n        var length = collection.length;\n        return typeof length == 'number' &amp;&amp; length &gt;= 0 &amp;&amp; length &lt;= MAX_ARRAY_INDEX;\n    };\n\n    _.each = function(obj, callback) {\n        var length, i = 0;\n\n        if (isArrayLike(obj)) {\n            length = obj.length;\n            for (; i &lt; length; i++) {\n                if (callback.call(obj[i], obj[i], i) === false) {\n                    break;\n                }\n            }\n        } else {\n            for (i in obj) {\n                if (callback.call(obj[i], obj[i], i) === false) {\n                    break;\n                }\n            }\n        }\n\n        return obj;\n    }\n\n    _.isFunction = function(obj) {\n        return typeof obj == 'function' || false;\n    };\n\n    _.functions = function(obj) {\n        var names = [];\n        for (var key in obj) {\n            if (_.isFunction(obj[key])) names.push(key);\n        }\n        return names.sort();\n    };\n\n    \/**\n     * \u5728 _.mixin(_) \u524d\u6dfb\u52a0\u81ea\u5df1\u5b9a\u4e49\u7684\u65b9\u6cd5\n     *\/\n    _.reverse = function(string){\n        return string.split('').reverse().join('');\n    }\n\n    _.mixin = function(obj) {\n        _.each(_.functions(obj), function(name) {\n            var func = _[name] = obj[name];\n            _.prototype[name] = function() {\n                var args = [this._wrapped];\n\n                push.apply(args, arguments);\n\n                return func.apply(_, args);\n            };\n        });\n        return _;\n    };\n\n    _.mixin(_);\n\n})()\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">root<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">self<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">self<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">self<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n        <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'object'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">global<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s1\">global<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">global<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span>\n        <span class=\"pl-smi\">this<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-v\">ArrayProto<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Array<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prototype<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">push<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">ArrayProto<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">push<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-en\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span> <span class=\"pl-k\">instanceof<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">!<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span> <span class=\"pl-k\">instanceof<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_wrapped<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">exports<\/span> <span class=\"pl-c1\">!=<\/span> <span class=\"pl-s\">'undefined'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-c1\">!<\/span><span class=\"pl-s1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">nodeType<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">typeof<\/span> <span class=\"pl-smi\">module<\/span> <span class=\"pl-c1\">!=<\/span> <span class=\"pl-s\">'undefined'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-c1\">!<\/span><span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">nodeType<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">exports<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-s1\">exports<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-smi\">module<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">exports<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-s1\">exports<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-s1\">root<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n\n    <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">VERSION<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'0.1'<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-c1\">MAX_ARRAY_INDEX<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Math<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">pow<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">53<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">-<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-en\">isArrayLike<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">collection<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">length<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">collection<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">length<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">length<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'number'<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">length<\/span> <span class=\"pl-c1\">&gt;=<\/span> <span class=\"pl-c1\">0<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">length<\/span> <span class=\"pl-c1\">&lt;=<\/span> <span class=\"pl-c1\">MAX_ARRAY_INDEX<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">each<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">callback<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">length<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">i<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">0<\/span><span class=\"pl-kos\">;<\/span>\n\n        <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-en\">isArrayLike<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-s1\">length<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">length<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-s1\">i<\/span> <span class=\"pl-c1\">&lt;<\/span> <span class=\"pl-s1\">length<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-s1\">i<\/span><span class=\"pl-c1\">++<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">callback<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">call<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">i<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">i<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">i<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-c1\">false<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-k\">break<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-kos\">}<\/span>\n            <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">i<\/span> <span class=\"pl-k\">in<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">callback<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">call<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">i<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">i<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">i<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-c1\">false<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                    <span class=\"pl-k\">break<\/span><span class=\"pl-kos\">;<\/span>\n                <span class=\"pl-kos\">}<\/span>\n            <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-kos\">}<\/span>\n\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n\n    <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">isFunction<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-k\">typeof<\/span> <span class=\"pl-s1\">obj<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'function'<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-c1\">false<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">functions<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">names<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">key<\/span> <span class=\"pl-k\">in<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">isFunction<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-s1\">names<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">push<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">names<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">sort<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-c\">\/**<\/span>\n<span class=\"pl-c\">     * \u5728 _.mixin(_) \u524d\u6dfb\u52a0\u81ea\u5df1\u5b9a\u4e49\u7684\u65b9\u6cd5<\/span>\n<span class=\"pl-c\">     *\/<\/span>\n    <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">reverse<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">string<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">string<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">split<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">''<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">reverse<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">join<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">''<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n\n    <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">mixin<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">each<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">functions<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">func<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prototype<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n                <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">args<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_wrapped<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n\n                <span class=\"pl-s1\">push<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">args<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n                <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">func<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-en\">_<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">args<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n            <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-en\">_<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">mixin<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-en\">_<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">\u76f8\u5173\u94fe\u63a5<\/h2>\n<ol dir=\"auto\">\n<li>\n<p dir=\"auto\"><a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/28\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/28\/hovercard\">\u300aJavaScript\u4e13\u9898\u4e4b\u7c7b\u578b\u5224\u65ad(\u4e0b)\u300b<\/a><\/p>\n<\/li>\n<li>\n<p dir=\"auto\"><a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/40\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/40\/hovercard\">\u300aJavaScript\u4e13\u9898jQuery\u901a\u7528\u904d\u5386\u65b9\u6cd5each\u7684\u5b9e\u73b0\u300b<\/a><\/p>\n<\/li>\n<\/ol>\n<h2 dir=\"auto\">underscore \u7cfb\u5217<\/h2>\n<p dir=\"auto\">underscore \u7cfb\u5217\u76ee\u5f55\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\">https:\/\/github.com\/mqyqingfeng\/Blog<\/a>\u3002<\/p>\n<p dir=\"auto\">underscore \u7cfb\u5217\u9884\u8ba1\u5199\u516b\u7bc7\u5de6\u53f3\uff0c\u91cd\u70b9\u4ecb\u7ecd underscore \u4e2d\u7684\u4ee3\u7801\u67b6\u6784\u3001\u94fe\u5f0f\u8c03\u7528\u3001\u5185\u90e8\u51fd\u6570\u3001\u6a21\u677f\u5f15\u64ce\u7b49\u5185\u5bb9\uff0c\u65e8\u5728\u5e2e\u52a9\u5927\u5bb6\u9605\u8bfb\u6e90\u7801\uff0c\u4ee5\u53ca\u5199\u51fa\u81ea\u5df1\u7684 undercore\u3002<\/p>\n<p dir=\"auto\">\u5982\u679c\u6709\u9519\u8bef\u6216\u8005\u4e0d\u4e25\u8c28\u7684\u5730\u65b9\uff0c\u8bf7\u52a1\u5fc5\u7ed9\u4e88\u6307\u6b63\uff0c\u5341\u5206\u611f\u8c22\u3002\u5982\u679c\u559c\u6b22\u6216\u8005\u6709\u6240\u542f\u53d1\uff0c\u6b22\u8fcestar\uff0c\u5bf9\u4f5c\u8005\u4e5f\u662f\u4e00\u79cd\u9f13\u52b1\u3002<\/p>\n<\/td>\n<p>\u6587\u7ae0\u8f6c\u8f7d\u81ea<a href='https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/56'>https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/56<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u5728 \u300aJavaScript \u4e13\u9898\u7cfb\u5217\u300b \u4e2d\uff0c\u6211\u4eec\u5199\u4e86\u5f88\u591a\u7684\u529f\u80fd\u51fd\u6570\uff0c\u6bd4\u5982\u9632\u6296\u3001\u8282\u6d41\u3001\u53bb\u91cd\u3001\u7c7b\u578b\u5224\u65ad\u3001\u6241\u5e73\u6570\u7ec4\u3001\u6df1\u6d45\u62f7\u8d1d\u3001\u67e5\u627e\u6570\u7ec4\u5143\u7d20\u3001\u901a\u7528\u904d\u5386\u3001\u67ef\u91cc\u5316\u3001\u51fd&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.lccc.top\/?p=1371\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1371","post","type-post","status-publish","format-standard","hentry","category-learn"],"_links":{"self":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts\/1371"}],"collection":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1371"}],"version-history":[{"count":1,"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts\/1371\/revisions"}],"predecessor-version":[{"id":1470,"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts\/1371\/revisions\/1470"}],"wp:attachment":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}