一段 js 代码的问题

2018-02-01 08:32:27 +08:00
 yantianqi
 var _ = function(obj) {
    if (obj instanceof _){
      console.log('没有 new')
      return obj;
    }

    if (!(this instanceof _)) {
      console.log('有 new')
      return new _(obj);
    }
    
    this._wrapped = obj;
  };

看不太懂这段代码? 求解

2494 次点击
所在节点    程序员
4 条回复
liangWL
2018-02-01 08:51:16 +08:00
前排坐等大佬解答,看不懂
oswuhan
2018-02-01 08:55:37 +08:00
如果是 instanceof 不懂就去翻手册,如果是 this._wrapped 不明白那就把程序整体多看几遍,弄清 wrappedObj 与 obj 有何区别,这个属性值在这段局部代码里面就是个普通标识符。
xu33
2018-02-01 09:18:20 +08:00
1 先判断 obj 是不是_的实例 如果是直接返回 obj 相当于实例复用
2 判断 this 是不是_的实例 如不是说明调用方是函数方式调用 那么帮他修正为构造函数方式调用 也就是加上 new
3 把 obj 挂到_wrapped 属性上面
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) 可以得到相同的结果。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/427596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX