V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yantianqi
V2EX  ›  程序员

一段 js 代码的问题

  •  
  •   yantianqi · 2018-02-01 08:32:27 +08:00 · 2490 次点击
    这是一个创建于 2486 天前的主题,其中的信息可能已经有所发展或是发生改变。
     var _ = function(obj) {
        if (obj instanceof _){
          console.log('没有 new')
          return obj;
        }
    
        if (!(this instanceof _)) {
          console.log('有 new')
          return new _(obj);
        }
        
        this._wrapped = obj;
      };
    

    看不太懂这段代码? 求解

    4 条回复    2018-02-01 10:08:57 +08:00
    liangWL
        1
    liangWL  
       2018-02-01 08:51:16 +08:00
    前排坐等大佬解答,看不懂
    oswuhan
        2
    oswuhan  
       2018-02-01 08:55:37 +08:00
    如果是 instanceof 不懂就去翻手册,如果是 this._wrapped 不明白那就把程序整体多看几遍,弄清 wrappedObj 与 obj 有何区别,这个属性值在这段局部代码里面就是个普通标识符。
    xu33
        3
    xu33  
       2018-02-01 09:18:20 +08:00
    1 先判断 obj 是不是_的实例 如果是直接返回 obj 相当于实例复用
    2 判断 this 是不是_的实例 如不是说明调用方是函数方式调用 那么帮他修正为构造函数方式调用 也就是加上 new
    3 把 obj 挂到_wrapped 属性上面
    Mutoo
        4
    Mutoo  
       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) 可以得到相同的结果。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4550 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 09:57 · PVG 17:57 · LAX 01:57 · JFK 04:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.