首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Underscore.js芯

Underscore.js芯
EN

Stack Overflow用户
提问于 2014-01-27 10:53:18
回答 1查看 105关注 0票数 1

我正在浏览下划线库的代码,看看它是如何构建的:

http://underscorejs.org/underscore.js

我理解其中的大部分内容,其中包含了一些评论,但有些部分我还不明白:

代码语言:javascript
复制
// 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;
};

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

代码语言:javascript
复制
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

好的,现在我将使用_构造函数创建一个新实例。新关键字将被使用,即使我不提供它,一切都很好。

代码语言:javascript
复制
var _a = _([1, 2, 3, 4, 5]); // { _wrapped: [1, 2, 3, 4, 5] }

下面一行的目的是什么?

代码语言:javascript
复制
if (obj instanceof _) return obj;

我可以删除它,而且代码仍然正常工作。它是否仅用于处理以下情况?

代码语言:javascript
复制
var _b = _(_a);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-27 13:13:40

是的,它是用来处理‘已经包装’的情况。

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

代码语言:javascript
复制
if (obj instanceof _) return obj;

作为证据- 下面是一个bug,它将此添加到解决方案中.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21378939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档