2011-04-29 137 views
0


帮助下面的查询将帮助我开始并澄清许多疑问。到目前为止,我读过我可以通过函数语句在JS中创建类,并使用JSON表示来保存对象值。所以,在下面的代码Javascript类,构造函数和种子值

  1. 如何写保持一些形状值
  2. 如何初始化从TESTDATA形状对象TESTDATA变量。我也许能够通过分配每个成员

    var obj = { 
          x: testData[i].x, 
           y: testData[i].y, 
          ...  
         }; 
    

创建的对象,这是正确的方式,或者我们可以使用构造函数描述here

var testData = [ {}, {} ] 


//Shape class 

var Shape = function(x, y, w, h) { 
     this.x = x; 
     this.y = y; 
     this.w = w; 
     this.h = h; 
     this.calculateArea = function() { 
      alert("Area.."); 
}; 


func test() { 
var arr = []; 
for (var i=0,l=testData.length; i<l; i++) { 
     var s = testData[i]; 
      var obj = // how to construct Shape object here through constructor   
     }; 
arr.push(obj); 

} 
+0

'JSON!= object literals'。在你的代码中根本没有JSON。 – 2011-04-29 12:13:57

+0

亚..亚历克斯在下面提到的相同..仍然熟悉一种对我来说是新的语言 – bsr 2011-04-29 12:31:15

回答

1

您可以构造一个新的对象(一个Shape,在这种情况下)与new关键字。所以,你可以使用:

var obj = new Shape(testData[i].x, testData[i].y, testData[i].w, testData[i].h); 
+0

所以没有明确的构造函数的声明是需要的?我是否需要指定所有参数,或者它们是否以重载的方式工作(比如说不指定函数成员或h参数)? – bsr 2011-04-29 11:49:52

+0

在javascript中,'function'是构造函数。假设你来自Java,那么JavaScript函数不能被重载。如果你要调用'Shape(x,y,w)','h'将会是'undefined',但不会抛出错误。但是,您可以在构造函数中进行条件检查以复制重载的效果。 [这里是一个很好的JavaScript OOP指南](http://eloquentjavascript.net/chapter8.html)。 – tcooc 2011-04-29 11:55:15

+0

谢谢..很好的资源... – bsr 2011-04-29 12:09:57

1

假设你需要TESTDATA是JSON运输从服务器等

testData = [{ x: 1, y: 1, w: 1, h: 1}, ...] 

然后作为@digitalFish建议你可以通过创建从每个测试数据元素的Shape对象

var obj = new Shape(s.x, s.y, s.w, s.h); 
arr.push(obj); 
0

new运算符允许您通过其构造函数实例化对象。

var circle = new Shape(x, y, width, height); 

而且,它不叫JSON对象(这将是JavaScript对象符号表示法),这就是所谓的对象的文字符号

0

当需要使用.apply时,新操作员可能会在某些边缘情况下导致问题。我相信最好的方法如下所示。这也是一个小DRYer,因为你不在整个过程中重复'this'。

var createShape = function(x, y, w, h) { 
    return { 
     x: x, 
     y: y, 
     w: w, 
     h: h, 
     calculateArea: function() { 
      alert("Area.."); 
     } 
    }; 
}; 
var a = createShape(1,2,3,4); 
var b = createShape(4,3,2,1); 
console.log(a, b); 
相关问题