如何在javascript中声明成员函数?获得;TypeError:Object.function不是函数;

如何在javascript中声明成员函数?获得;TypeError:Object.function不是函数;,javascript,typeerror,Javascript,Typeerror,我来自java背景,我试图以java风格的方式声明成员。为什么我的功能对外不可见或不被识别为功能?从函数内部为函数声明memberfunctions的正确方法是什么 function Animation() { var draw = function draw() { ... }; var move = function move() { ... }; } function startAnimation() { ... var animation

我来自java背景,我试图以java风格的方式声明成员。为什么我的功能对外不可见或不被识别为功能?从函数内部为函数声明memberfunctions的正确方法是什么

function Animation() {
  var draw = function draw() {
      ...
  };

  var move = function move() {
    ...
  };
}

function startAnimation() {
  ...
  var animation = new Animation();
  function frame() {
    ...
    animation.move()
    animation.draw();
    ...
  }
}
执行代码时,控制台中出现一个错误:

TypeError: Object.function is not a function

动画是一个函数,而不是一个对象。请尝试此操作

var Animation = {
    draw: function() {
     ...
    },

    move: function() {
     ...
    },
}
当然,现在称之为“只做动画”

或者如果你想去的话,那不在问题之列

var Animation = (function ()
    var Class = function()
    {
       this.draw = function () {};
       this.move = function () {};
    });
    (Class.prototype);
    return Class;
})();

如果希望将其作为实例方法使用,也可以这样做

function Animation() {...}

Animation.prototype.move = function() {...};

Animation.prototype.draw = function() {...};
或者使用ES6

class Animation {

    constructor() {...}

    move() {
       ...
    }

    draw() {
       ...
    }
}

在代码中,
draw
move
是私有变量

将您的功能分配给此的成员:

function Animation() {
  this.draw = function() {
      ...
  };

  this.move = function() {
    ...
  };
}

var an1 = new Animation();
an1.draw() // do something
an1.move() // also do something 

当然,您也可以将其分配给@UnicodeSnowman描述的原型

您正在声明局部变量,仅在
Animation()函数中可见。您需要成员变量,例如
this.draw=函数draw(){…}
为什么投票被否决?@Oleander给出了这个答案,你将如何创建多个
动画实例?使用原始代码和其他答案,这是可能的。@PaulRoub-Aha,错过了这一部分。这就是为什么下层选民应该留下评论。我的意思是,我们还在这里学习。好吧,从技术上讲,你可以使用
对象。创建
我认为第二个例子中的括号是错误的。本地而非私有。这里有一个区别,考虑到JavaScript中的对象构造函数只是函数,并且语言中没有OOP隐私的真正概念。@Oka它也可以是局部的&作为私有的,JS不支持私有变量,但根据Douglas Crockford,它也可以用这种方式实现。请看。你也是对的