2012-03-14 3 views
3

どのように1つのパターンが動作し、それ以外のものはありませんか? 2番目のコードでは、プロトタイプへのリンクが失われます.2番目のパターンを使用してプロトタイプへのリンクを確立する方法はありますか?それとも間違っていますか?どのようにプロトタイプへのリンクが失われるのですか?

これは

function Robot() { 
    this.weapons=5; 
    this.lives=5; 
} 

Robot.prototype.fireWeapon=function(){alert('weapons fired');}; 

var a=new Robot(); 
a.fireWeapon(); 

このdoesntの仕事

function Robot() { 

    var weapons=5; 
    var lives=10; 

    return { 
     weapons: weapons, 
     lives : lives 
    }; 
} 

Robot.prototype.fireWeapon=function(){alert('weapons fired');}; 

var a=new Robot(); 
a.fireWeapon(); 

答えて

1

はあなたの機能の両方のログを参照してください。

新しい匿名オブジェクトを返すと、デフォルトでaに割り当てられる式がオーバーライドされます。これはRobotです。

がそれぞれにこの行を試してみて、あなたが表示されます。最初のもののために

alert(a.constructor); 

を、あなたはObjectと第二が表示されます、あなたはRobot機能が表示されます。

1

A javascriptのクラスすべきないreturn何かを作品!

もしそうであれば、返すものと同じで、プロトタイプクラスではありません。それは第二の例では、あなたがRobotを持っていないので、あなたはObjectを持っているhttp://jsfiddle.net/maniator/UreSA/

関連する問題