理解_.js中下划线的声明吗?

本教程将介绍理解_.js中下划线的声明吗?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

理解_.js中下划线的声明吗? 教程 第1张

问题描述

这是从annotated source of _.js开始的。尽管我可能会尝试,但我的JavaScript能力还不够高,无法理解这里发生的事情。我希望有人能一步一步地给出一个真实的解释。我真的不知道下面的代码除了以某种方式设置_以供使用之外还有什么作用,尽管我理解每个表达式。

 var _ = function(obj) {
 if (obj instanceof _) return obj;
 if (!(this instanceof _)) return new _(obj);
 this._wrapped = obj;
  };

  if (typeof exports !== 'undefined') {
 if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _;
 }
 exports._ = _;
  } else {
 root._ = _;
  }

推荐答案

var _ = function(obj) {
 // Either serve as the identity function on `_` instances,
 // ... or instantiate a new `_` object for other input.

 // If an `_` instance was passed, return it.
 if (obj instanceof _) return obj;
 // If someone called `_(...)`, rather than `new _(...)`,
 // ... return `new _(...)` to instantiate an instance.
 if (!(this instanceof _)) return new _(obj);

 // If we are instantiating a new `_` object with an underlying,
 // ... object, set that object to the `_wrapped` property.
 this._wrapped = obj;
};

// If there is an exports value (for modularity)...
if (typeof exports !== 'undefined') {
 // If we're in Node.js with module.exports...
 if (typeof module !== 'undefined' && module.exports) {
  // Set the export to `_`
  exports = module.exports = _;
 }
 // Export `_` as `_`
 exports._ = _;
} else {
 // Otherwise, set `_` on the global object, as set at the beginning
 // ... via `(function(){ var root = this; /* ... */ }())`
 root._ = _;
}

好了关于理解_.js中下划线的声明吗?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。