2011-11-15 45 views
1

在文件meterA.js我有这个构造原型的Javascript

window.MeterA = function(options) 
    { 
     return this.init(options); 
    } 

    MeterA.prototype = { 
     init: function(options) { 
      this.container = options.container; 
      this.width = options.width; 
      this.height = options.height; 
      this.sliderSize = options.sliderSize; 
      var Canvas = { 
       meter: TBE.CreateRectCanvasElement (displayWidth, displayHeight), 
       slider: TBE.CreateSquareCanvasElement (sliderSize) 
      }; 
      Container.appendChild (Canvas.meter); 
      Container.appendChild (Canvas.slider); 
     } 
    } 

然后在文件pane.html,我试图用初始化仪表:

var MeterA = new MeterA({ 
    container: Div.meterA, 
    width:  GetNumberIgnoreUnit(Div.speedMeter.style.width, 2), 
    height:  GetNumberIgnoreUnit(Div.speedMeter.style.height, 2), 
    sliderSize: 10 
}); 

,但我得到“MeterA是不是构造函数“作为错误,为什么?

+1

你确定你包括在该页面的JavaScript文件..? – alessioalex

+1

你真的不应该调用变量'MeterA' –

回答

0
var MeterA = new MeterA({ ... 

我相信使用MeterA作为变量名和类名是这里的问题。在JavaScript变量声明“悬挂”在函数的顶部,这样MeterA变得不确定

这里有一些很好的解释:http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

+0

谢谢,只是我的一个粗心的错误...但我必须学习abt javascript提升!对我来说新鲜!但我不认为在这种情况下起重可以应用... – yeeen

0

平稳沿着这些路线应该工作:

var MeterA = (function() { 

    // constructor 
    var MeterA = function (options) { 
     this.init(options); 
    }; 

    // prototype 
    MeterA.prototype = { 
     init: function (options) { 
      console.log(options); 
     } 
    }; 

    return MeterA; 

})(); 

obj = new MeterA({ 
    opt1: 'sasa', 
    opt2: false 
}); 

我建议Javascript Patterns 2010为更深入地了解构造函数模式。

关于JavaScript的另一个好读Essential JavaScript Design Patterns For Beginners, Volume 1.