javascript - Underscore.js 核心

标签 javascript underscore.js

我正在浏览 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/

相关文章:

javascript - Underscore.js 模板 : Template variable not rendered

Javascript - requestAnimationFrame with WebSockets - 性能问题

javascript - 如何对延迟函数执行单元测试?

javascript - jQuery UI Resizable 缩放比例仅为拖动的 50%

javascript - 延迟加载不会加载可见图像

node.js - 在 node.js 中对 Mongoose 用户使用 _.omit

javascript - 使用另一个数组在 underscorejs 中过滤一个数组

javascript - 这里所做的权衡是什么? (推与数组)

Javascript,下划线尝试返回具有最高值的对象的键

javascript - 如何将字符串添加到待办事项列表中的字符串列表 react