2016-04-27 41 views
0

関数名を文字列として呼び出す必要があります。 これはこれまで私が持っているものです:関数名からのJavascript呼び出し関数

var obj = window[type](); 

タイプは文字列です。私はWall()関数を使ってテストしています。

Wall.prototype = new GameObject(); 
Wall.prototype.constructor = Wall; 
function Wall() { 
    this.bounds.width = 50; 
    this.solid = true; 
    this.bounds.height = 50; 
    this.layer = 1; 
    this.bounds.setCenter(engine.gameView.center().add(75, 75)); 
    this.render = function() { 
     engine.gameView.fillRect(this.bounds, new Color(0, 0, 0)); 
    }; 
} 

GameObjectは「拡張」するクラスです。私はちょうどnew Wall()(反射なしで)を使用すると、正常に動作します。しかし、私がリフレクションを使用すると、ウォールがウィンドウとして出力されます(コンストラクタのconsole.logで見たように)。私はそれを反射なしで呼び出すと、それを壁として出力します。それは、リフレクションを使うときはウィンドウであると言われているので、それはGameObjectのプロパティであるため、boundsは未定義です。これを修正するにはどうすればよいですか?

+0

あなたは何を達成しようとしていますか? 'object [propertyname]()'は関数を名前で呼び出す正しい方法です。 – Gabriel

答えて

1

コンストラクタを呼び出すときは、 "new"キーワードが必要です。例えば、

var obj = new window[type](); 
関連する問題