2016-08-11 73 views
1

JavaScript新功能。嘗試創建一個數據類型(假設OBJECT是我想要的)可以在各種函數之間使用的定義。目前的定義只是變量(沒有函數等)。我遇到的問題是,我想先創建它,然後再設置屬性...Javascript - 創建新對象,但不傳遞任何參數

我想要做的是...有一個定義。

// Object Definition 
function resultObj = { 
    isValid: true, 
    nn_name: '', 
    account_name: '', 
    translated_name: '', 
    address1: '', 
    city: '', 
    state: '', 
    zip: '', 
    country: '', 
    formattedAddress : '', 
    auth_string: '', 
    error_text: '', 
    error_body: '', 
    error_type: ''  
}; 

在某些時候,我會創建一個定義的發生。

myData = new resultObj; 
... do some processing here... 
... set a FEW of the variables 
myData.zip = '12345'; 

如何創建這個,以便我不必在創建時傳入所有的值(或空參數)?

+1

這是無效的JavaScript ...和JavaScript具有構造函數和可選參數...並沒有用戶定義類型的概念... –

+1

由於@JaredSmith表示它是無效的,但如果你想繼續你的結構,你應該檢查[Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)。 [瀏覽器支持](http://kangax.github.io/compat-table/es6/#test-Object_static_methods_Object.assign) – Bhavik

回答

3

如何創建您原來的默認/初始目標,然後只要你有與非常創造一個又一個新的/獨立的對象相同的初始屬性,你只需將舊對象複製到新對象中?

var myData = Object.assign({}, resultObj); 

您可以使用Object.assign來創建一個精確的副本。

的Object.assign()方法被用於從一個或多個源對象的所有 枚舉自己的屬性的值複製到目標對象 。它會返回目標對象。

var resultObj = { 
 
    isValid: true, 
 
    nn_name: '', 
 
    account_name: '', 
 
    translated_name: '', 
 
    address1: '', 
 
    city: '', 
 
    state: '', 
 
    zip: '', 
 
    country: '', 
 
    formattedAddress : '', 
 
    auth_string: '', 
 
    error_text: '', 
 
    error_body: '', 
 
    error_type: ''  
 
}; 
 

 
var myData = Object.assign({}, resultObj); 
 
document.write(JSON.stringify(myData));

另見:How do I correctly clone a JavaScript object?

+0

作爲一個額外的好處,即使在IE –

+0

@@拉曼微不足道的填充 - 這正是我想要的。謝謝! – user1009073

0

這不是要定義一個對象上的所有潛在特性:

function resultObj(){} 
var result = new resultObj() 
result.zip = 12345 
console.log(result.zip) //=> 12345 
+0

雖然perf很少成爲問題,但在構建時並未定義所有屬性(即使它們默認爲空)意味着財產訪問是一個數量級慢... –

0

你可以使用這樣的事情:

var getResultObj = function(param1, param2) { 
    var one = param2 ? param2 : ''; 
    var two = param2 ? param2 : ''; 

    var objectToBeReturned = { 
     isValid: true, 
     nn_name: one, 
     account_name: two, 
     translated_name: '', 
     address1: '', 
     city: '', 
     state: '', 
     zip: '', 
     country: '', 
     formattedAddress : '', 
     auth_string: '', 
     error_text: '', 
     error_body: '', 
     error_type: '' 
     }; 

     return getResultObj; 
}; 

每次調用getResultObj();時間返回你的對象的一個​​新實例。 但您也可以使用任何其他Constructor Pattern模式。

相關問題