2013-12-24 89 views
0

我遇到一些非常奇怪的行爲與underscore.js _.map函數。Underscore.js地圖不適用於新對象

看起來好像當我嘗試在功能內部「新建」一個對象時,它失敗了。但是如果函數內部沒有新對象,它將按預期工作。我在這裏錯過了什麼嗎?

以下不起作用(即不打印任何內容)。這似乎是創建新對象後要失敗:

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數組中的項目。

+1

它應該是'Object.create(test)'not'new test' – rab

回答

1

您的代碼不工作是由這些線路引起的原因:

var test = { a: "test" }; 

var a = new test; 

您必須聲明測試的功能:

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

在爲了使用new operator

該問題與underscore.js或map函數無關,但通常與javascript相關。

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頁面底部有一個polyfill函數。