2017-02-09 38 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原始雏形。

如果您颠倒这两条语句的顺序,您的测试将通过。