2017-02-09 106 views
0

我想我可能做一些愚蠢的,但我不知道......Javascript繼承 - 不能訪問方法

我有以下兩類:

function Sprite() 
{ 
} 

Sprite.prototype.test1 = function() 
{ 
    console.log("test1"); 
} 

function Player() 
{ 
} 

Player.prototype.test2 = function() 
{ 
    console.log("test2"); 
} 

Player.prototype = new Sprite(); 
var player = new Player(); 

player.test1(); // this works 
player.test2(); // this doesn't work.. 

我努力理解爲什麼test2()不起作用,但test1()確實起作用。如果我爲這些類添加屬性,那麼我可以從它們兩個訪問屬性,我只是不能調用播放器類的方法。我究竟做錯了什麼?

+0

當你將一個完整的對象賦給'Player.prototype'時,你會覆蓋'Player.prototype.test2'。如果你之後定義了'test2',它會在新對象上創建方法,而且兩者都可以工作。 – dandavis

回答

1

當你這樣做:

Player.prototype.test2 = function() 
{ 
    console.log("test2"); 
} 

Player.prototype = new Sprite(); // Original Player.prototype gets overwritten here 

你先修改Player.prototype的屬性,然後重新分配給Player.prototype一個新的對象,失去Player原始雛形。

如果您顛倒這兩條語句的順序,您的測試將通過。