2011-05-03 53 views
0

在我的下列类定义中,当调用我的drawElipse方法时,我的宽度,高度,列等始终未定义。Javascript类属性始终未定义

但是在我的页面中,我设置了所有的属性。

$(document).ready(function() { 
    var element = $('#positioning_canvas'); 
    element.click(scientificBox.click); 
    scientificBox.columns = 9; 
    scientificBox.rows = 9; 
    scientificBox.canvas = element.get(0); 
    etc. 

如何解决这个问题?

var scientificBox = new function() { 
var aliquotHeight; 
var aliquotWidth; 

this.width = 500; 
this.height = 500; 
this.columns = 9; 
this.rows = 9; 
this.canvas = null; 
this.imageRoot = ""; 

var drawElipse = function (ctx, x, y, w, h) { 
    var kappa = .5522848; 
    var ox = (w/2) * kappa; // control point offset horizontal 
    var oy = (h/2) * kappa; // control point offset vertical 
    var xe = x + w;   // x-end 
    var ye = y + h;   // y-end 
    var xm = x + w/2;  // x-middle 
    var ym = y + h/2;  // y-middle 
+1

我认为你需要展示一些更多的代码来使问题更加清晰;你可以使用jsfiddle或者jsbin来显示所有页面。无论如何,您是否尝试过在您的doc-ready回调中将scientificBox记录到控制台并检查它? – RwwL 2011-05-03 19:35:15

回答

2

在下面的代码片段我创建了一个名为ScientificBox有两个属性,一个方法类(我不太清楚,如果这是你所要求的解决方案)。

function ScientificBox() { 
     this.width = 9; 
     this.height = 9; 

     this.drawElipse = function() { 
      alert(this.width * this.height); 
     } 
    } 

你可以调用这个类,然后通过下面的代码:

var box= new ScientificBox(); 
    box.drawElipse(); 

我测试过这一点,它的工作原理。也许这是你正在寻找的解决方案?

此致敬礼。

编辑:我忘了提及显示在类上设置属性的代码示例。

var test = new ScientificBox(); 
    test.width = 12; 
    test.height = 2; 
    test.drawElipse(); 
+0

没错,不使用'new'就不会创建任何实例。应该是解决方案。 – 2011-05-04 06:44:45