TypeError:无法在对象中找到函数testFunction

时间:2014-07-25 09:49:25

标签: javascript

我编写了一个位于我的对象内部的测试函数,但似乎无法访问该函数。我究竟做错了什么?我的意思是我确定我编写的代码很糟糕,但具体是导致错误的原因是什么?:

function player(){

this.green=0;

  function testFunction(){
    this.green=99;
  };  
};

玩家对象在游戏对象中创建:

function game(numPlayers){

  this.playerArray=[];

  switch(numPlayers){
  case 2:
    this.player1=new player();
    this.player2=new player();
    this.playerArray.push(this.player1,this.player2);
  break;
  case 3:
    this.player1=new player();
    this.player2=new player();
    this.player3=new player();
    this.playerArray.push(this.player1,this.player2,this.player3);
  break;
  case 4:
    this.player1=new player();
    this.player2=new player();
    this.player3=new player();
    this.player4=new player();
    this.playerArray.push(this.player1,this.player2,this.player3,this.player4);
  break;
  };

};

当我跑步时:

var TE=new game(2);
TE.player1.testFunction();   <---
Logger.log(TE.player1.green);

我在主题行中收到错误。

2 个答案:

答案 0 :(得分:1)

具体是:

您尚未公开测试功能,无法从外部调用它。

这样做:

function player(){

this.green=0;

  this.testFunction = function(){
    this.green=99;
  };
};

更好的方法是:

function Player(){ // capitalize class name

    this.green=0;

};

Player.prototype.testFunction = function( num ){
    this.green = num || 99;
}
通过这样做,所有你的玩家类实例都不需要有testFunction,因为那里有属性而不是父类,那么原型会有这个属性,它将通过原型继承来暴露。

答案 1 :(得分:0)

您需要将testFunction定义为播放器对象的成员:

function player(){

  this.green=0;

  this.testFunction = function(){
    this.green=99;
  };  
};

注意“this.testFunction = function()...”