2015-10-20 33 views
0

我正嘗試使用JavaScript創建一個帶有幾個空屬性的var。在其他語言中(肯定很快,但我確信在其他語言中),這被稱爲struct具有空值的多個屬性的變量

我希望它是什麼樣子是這樣的:

myStruct { 
    value1 : String, 
    value2 : String 
} 

我發現到最接近的是對象(JavaScript Objects),但是,你將不得不增加值(據我所知)。

後,我需要添加myStructarray。我希望這很清楚。什麼是最有效的方法來實現這一目標?

+0

[的Structs的Javascript(http://stackoverflow.com/questions/502366/structs-in-javascript)的可能的複製 – Chris

回答

1

方法1:

最簡單的實現這一點的是組合使用Function構造。

var myStruct = function(prop1,prop2){ 
 
    this.prop1 = prop1; 
 
    this.prop2 = prop2; 
 
    } 
 

 

 
var myStructObj = new myStruct(); 
 
var myStructObj2 = new myStruct("prop1","prop2"); 
 
var myArr = []; 
 
myArr.push(myStructObj); 
 
myArr.push(myStructObj2); 
 
console.log(myArr);

的增強將默認PARAMS添加到構造和參數傳遞而創建。

var myStruct = function(arg1, arg2){ 
 
     var prop1 = arg1 || "defaultProp1Value"; 
 
     var prop2 = arg2 || "defaultProp2Value"; 
 
     this.prop1 = prop1; 
 
     this.prop2 = prop2; 
 
     } 
 

 

 
    var myStructObj1 = new myStruct(); 
 
    //myStructObj1.prop1 is "defaultProp1Value" 
 
    //myStructObj1.prop2 is "defaultProp2Value" 
 

 
    var myStructObj2 = new myStruct("prop1"); 
 
    //myStructObj2.prop1 is "prop1" 
 
    //myStructObj2.prop2 is "defaultProp2Value" 
 
    
 
    var myArr = []; 
 
    myArr.push(myStructObj1); 
 
    myArr.push(myStructObj2);

隨着ES6,你可以做到這一點,你可以現在添加默認參數構造函數。

//This only works in ES6 
// Will cause errors on browsers which have not yet added support 
// WIll work when used along with a transpiler like Babel 

var myStruct = function(arg1 = "defaultProp1", arg2 = "defaultProp2"){ 
    this.prop1 = arg1; 
    this.prop2 = arg2; 
} 


var myStructObj1 = new myStruct(); 
//myStructObj1.prop1 is "defaultProp1Value" 
//myStructObj1.prop2 is "defaultProp2Value" 

var myStructObj2 = new myStruct("prop1"); 
//myStructObj2.prop1 is "prop1" 
//myStructObj2.prop2 is "defaultProp2Value" 

var myArr = []; 
myArr.push(myStructObj1); 
myArr.push(myStructObj2); 

console.log(myArr); 

你可以閱讀更多關於它here

方法:2

使用呼叫方法。通過這種方法,您可以即時添加道具。無論何時您想將一對道具添加到具有空值或默認值的對象,都可以使用此方法。

var addPropsFunction = function(a,b){ 
 
    
 
    this.prop1 = a; 
 
    this.prop2 = b; 
 
    } 
 

 

 
var myObj1 = {}; 
 
var myObj2 = {}; 
 

 
addPropsFunction.call(myObj1); 
 
addPropsFunction.call(myObj2,"val1","val2"); 
 

 
console.log(myObj1); 
 
console.log(myObj2);

方法:3

ES6類

class myStruct{ 
    constructor(prop1,prop2){ 
     this.prop1 = prop1; 
     this.prop2 = prop2; 
    } 

} 

var myObj = new myStruct(); 
console.log(myObj); 

ES6小提琴 - http://www.es6fiddle.net/ifz3rjcc/

在所有情況下,昌ing屬性是一樣的。 要更改爲prop1的值,所有你需要做的就是

myStructObj.prop1 = "my val"; 
+0

謝謝!有沒有辦法在創建'myStructObj'時分配所有的值? – Jessica

+0

如果我不想有默認值,下面的工作會是什麼? var **'myStruct = function(prop1,prop2){this.prop1 = prop1; this.prop2 = prop2; }'** – Jessica

+0

是的,它會的。對第一個代碼片段進行編輯。您可以不傳遞參數,在這種情況下,它們將被定義爲undefined,或者您可以在創建對象時傳遞參數。 –

0

null是一個值,意思是「沒有價值」。將null分配給您的屬性將產生您所需的內容。

+1

請問我能夠爲它分配一個值後? – Jessica

+1

當然你會 –

0

那麼你可以做

var myArray = [ 
    {"value1":"Value1Here", "value2":"Value2Here"}, 
    {"value1":"Value1Here", "value2":"Value2Here"}, 
    {"value1":"Value1Here", "value2":"Value2Here"} 
]; 

(這些值可以爲null) 或者你可以聲明你的對象如上 做:

myArray.push(yourObject)