2015-10-21 150 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);