我正在使用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数组中的所有项目。
答案 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);
参考:Creating new objects using object literals
MDN Object.create
***
***如果由于浏览器限制而无权访问Object.create
,则此MDN页面底部会显示填充功能。