Underscore.js映射不使用新对象

时间:2013-12-24 05:03:38

标签: javascript jquery underscore.js

我正在使用underscore.js _.map函数遇到一些非常奇怪的行为。

似乎当我尝试“新建”函数内部的对象时,它失败了。但是如果函数内没有新对象,它会按预期工作。我在这里错过了什么吗?

以下不起作用(即它什么都不打印)。创建新对象后似乎失败了:

var test = { a: "test" };

var foo = _.map(data.A, function (dataItem) {
    var a = new test();

    console.log(a);
    return a;
});

但这确实有效:

var test = { a: "test" };

var foo = _.map(data.A, function (dataItem) {
    var a = dataItem;

    console.log(a);
    return a;
});

以上记录了data.A数组中的所有项目。

2 个答案:

答案 0 :(得分:1)

您的代码不起作用的原因是由以下行引起的:

var test = { a: "test" };

var a = new test;

您必须将test声明为函数:

var test = function () {
   return  { a: "test" };
}

以使用new operator

该问题与underscore.js或map函数无关,但通常与javascript有关。

答案 1 :(得分:0)

这不是一个真正的Underscore.js问题,而是更多的JavaScript对象问题。由于test是对象字面值,因此您需要使用Object.create()。这将采用test并创建一个新对象

var a = Object.create(test);

Fiddle

参考:Creating new objects using object literals

MDN Object.create ***

***如果由于浏览器限制而无权访问Object.create,则此MDN页面底部会显示填充功能。