gpt4 book ai didi

javascript - Underscore.js 核心

转载 作者:行者123 更新时间:2023-11-30 17:39:28 25 4
gpt4 key购买 nike

我正在浏览 underscore 库的代码只是为了看看它是如何构建的:

http://underscorejs.org/underscore.js

大部分内容我都看懂了,里面有注释,但是有些部分我还不明白:

// Create a safe reference to the Underscore object for use below.
var _ = function(obj) {
if (obj instanceof _) return obj;
if (!(this instanceof _)) return new _(obj);
this._wrapped = obj;
};

为了了解它的工作原理,我对它做了一些改动:

function _(obj) {

if (obj instanceof _) {
return obj;
}

if (!(this instanceof _)) {
return new _(obj);
}

this._wrapped = obj;
}

// just an example, if statement to check if array
// is really an array should be added

_.sum = function (array) {
var sum = 0;
for (var i = 0, ilen = array.length; i < ilen; i += 1) {
sum += array[i];
}
return sum;
}

_.sum([1, 2, 3, 4, 5]); // 15

好的,现在我将使用 _ 构造函数创建一个新实例。即使我不提供,也会使用 new 关键字,一切正常。

var _a = _([1, 2, 3, 4, 5]); // { _wrapped: [1, 2, 3, 4, 5] }

下一行的目的是什么?

if (obj instanceof _) return obj;

我可以删除它并且代码仍然可以正常工作。是不是只用来处理下面的情况?

var _b = _(_a);

最佳答案

是的,它用于处理'已经包装'的情况。

如果您将下划线实例传递给 _,它将返回该实例而不是包装它。这就是目的:

if (obj instanceof _) return obj;

作为证明 - here is the bug adding this in solved .

关于javascript - Underscore.js 核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com