var _ = function(obj) {
    if (obj instanceof _){
      console.log('没有 new')
      return obj;
    }
    if (!(this instanceof _)) {
      console.log('有 new')
      return new _(obj);
    }
    
    this._wrapped = obj;
  };
看不太懂这段代码? 求解
|  |      1liangWL      2018-02-01 08:51:16 +08:00 前排坐等大佬解答,看不懂 | 
|  |      2oswuhan      2018-02-01 08:55:37 +08:00 如果是 instanceof 不懂就去翻手册,如果是 this._wrapped 不明白那就把程序整体多看几遍,弄清 wrappedObj 与 obj 有何区别,这个属性值在这段局部代码里面就是个普通标识符。 | 
|  |      3xu33      2018-02-01 09:18:20 +08:00 1 先判断 obj 是不是_的实例 如果是直接返回 obj 相当于实例复用 2 判断 this 是不是_的实例 如不是说明调用方是函数方式调用 那么帮他修正为构造函数方式调用 也就是加上 new 3 把 obj 挂到_wrapped 属性上面 | 
|  |      4Mutoo      2018-02-01 10:08:57 +08:00 看起来像是 lodash 的 chain 函数。意图是将传入 obj 参数封装成 lodash 实例。支持直接调用该函数或者通过 new 创建:_(obj) / new _(obj) 1 如果 obj 已经是 lodash 的实例,直接返回。(不论是直接调用还是通过 new ) 通过 new 调用,构造函数中的 this 表示新建的 lodash 实例,否则为 global/window。 2 若是后者,手动调用 new 方法并反回; 3 若是前者,将 obj 存起来之后使用。 这样做的话,无论是 _(obj) 或者 new _(obj) 可以得到相同的结果。 |