试图实例化一个动画类,让“对象不是一个函数”

时间:2015-04-22 18:01:11

标签: javascript

我正在尝试实例化一个这样的类:

var drawCrash = new DrawCrash;

但我得到一个TypeError:对象不是函数。

我已经定义了这样的类 -

var DrawCrash = {

  //Private variables
  canvas : ge1doot.Canvas(),
  particles: "",
  nbrParticles : 160,
  speed : 6,
  strength : .4,
  radius : 4,
  perspective : 0.5,
  ang : null,
  CosOrSin1 : null,
  CosOrSin2 : null,
  enum : {
  	Wobble : "wobble",
  	Twirl : "twirl"
  },
  setDrawing : function (type) {
  	if (type === this.enum.Twirl){
  	    Blah blah blah
  		this.cosOrSin2 = Math.sin;
  	} else if (type === this.enun.Wobble){
  		Blah blah blah
  	} else {alert("Wrong enum for DrawCrash");}
  },
  startDrawing : function () {
    blah blah blah
  }
 }

这种语法有问题吗?

2 个答案:

答案 0 :(得分:1)

这不是你在Javascript中实例化对象的方式。

A" Class"在这个世界上只是一个功能:

function DrawCrash() {

  //Private variables
  var canvas = ge1doot.Canvas()
    particles: "",
    nbrParticles : 160,
    speed : 6,
    strength : .4,
    radius : 4,
    perspective : 0.5,
    ang : null,
    CosOrSin1 : null,
    CosOrSin2 : null,
    enum : {
      Wobble : "wobble",
      Twirl : "twirl"
    },
    setDrawing : function (type) {
      if (type === this.enum.Twirl){
        Blah blah blah
        this.cosOrSin2 = Math.sin;
      } else if (type === this.enun.Wobble){
        Blah blah blah
      } else {alert("Wrong enum for DrawCrash");}
   },
   startDrawing : function () {
     blah blah blah
   }
 }

然后你可以实现它:

var drawCrash = new DrawCash();

但是,您的所有变量在此对象上似乎都是私有的。我想公开一些,你需要将它们放在"这个":

function DrawCash() {
  // private variables
  var somePrivateVar = 42;

  // public variables
  this.publicVar = "hello";
}

var drawcash = new DrawCash();
drawcash.publicVar; // returns "hello"
drawcash.somePrivateVar; // undefined

最后,为了在这个"类"上定义一个方法。以有效的方式,您需要扩展该对象原型(Javascript是面向原型的语言):

function DrawCash() { ... }

DrawCash.prototype.someMethod = function() { ... }

var drawcash = new DrawCash();
drawcash.someMethod();

您可以通过阅读本文来了解更多信息,例如:

http://www.phpied.com/3-ways-to-define-a-javascript-class/

答案 1 :(得分:0)

DrawCrash是一个普通的旧javascript对象(因此错误):一个对象文字。您只需访问其属性和方法:

DrawCrash.startDrawing();

如果您想使用new运算符,则需要创建一个函数:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

然后你可以说像

var foo - new Car('plymouth', 'something', 1978);

这里有两种方法的有趣讨论:

Should I be using object literals or constructor functions?