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