2015-10-21 148 views
3

我試圖編寫一個「struct」,並以與其他任何編程語言(即Swift)相同的方式使用它。這裏的 「結構」:從函數訪問var(Struct)

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

我然後訪問prop1這樣的:

var someVar = myStruct.prop1 

出於某種原因不能正常工作。我做錯了什麼,我該如何解決這個問題?

這裏的JSFiddle,這裏是完整的代碼:

$(document).ready(function(){ 
 
    var myStruct = function (prop1) { 
 
\t \t this.prop1 = 30; 
 
\t } 
 
    
 
    $("button").click(function(){ 
 
     \t $("p").css({"width": myStruct.prop1, "font-size": "200%"}); 
 
    }); 
 
});
<body> 
 

 
<h2>This is a heading</h2> 
 

 
<p style="background-color:#ff0000">This is a paragraph.</p> 
 
<p style="background-color:#00ff00">This is a paragraph.</p> 
 
<p style="background-color:#0000ff">This is a paragraph.</p> 
 

 
<p>This is a paragraph.</p> 
 

 
<button>Set multiple styles for p</button>

回答

2

什麼你做是Object Constructor,擺脫你可以使用的構造方法的對象new關鍵字來創建對象的新實例。但是,除非需要創建該對象的多個實例,否則不應該使用它。

$(document).ready(function(){ 
    var myStruct = function() { 
     this.prop1 = 30; 
    } 

    $("button").click(function(){ 
     $("p").css({"width": new myStruct().prop1, "font-size": "200%"}); 
    }); 
}); 

如果您不需要單獨的對象實例,可以使用下例中演示的語法創建一個新對象。

注:

  • 這個語法允許你在你在你的例子嘗試的方式訪問屬性。
  • 在下例中,您已經將使用此語法的對象傳遞給$('p').css()方法。
  • 使用此語法聲明的屬性應使用逗號而不是分號分隔,這與使用數組語法時相同。
  • 其名稱中包含特殊字符的任何對象屬性都必須用引號引起來,並且只能使用object["property"]表示法進行訪問。

$(document).ready(function(){ 
 
    var myStruct = { 
 
     width: '30px', 
 
     fontsize: '200%' 
 
    } 
 
    
 
    $("button").click(function(){ 
 
     \t $("p").css({ 
 
      "width": myStruct.width, 
 
      "font-size": myStruct.fontsize 
 
     }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<body> 
 

 
<h2>This is a heading</h2> 
 

 
<p style="background-color:#ff0000">This is a paragraph.</p> 
 
<p style="background-color:#00ff00">This is a paragraph.</p> 
 
<p style="background-color:#0000ff">This is a paragraph.</p> 
 

 
<p>This is a paragraph.</p> 
 

 
<button>Set multiple styles for p</button>

3

要使用構造創建對象,用途:

function MyClass(prop) { 
    this.prop = prop; 
} 

要創建一個對象類型的,使用:

var obj = new MyClass(30); 

要引用屬性對象的,使用:

console.log(obj.prop); 

由於在被傳遞給對象,這一點。道具設置爲並且該值將顯示在日誌中。

感謝@Tiny_Giant的澄清。

0

這是類聲明:

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

這是類實現:

var obj = new myStruct(1);