Javascript 为什么';我的函数调用不是指原型链工作的基础吗?

Javascript 为什么';我的函数调用不是指原型链工作的基础吗?,javascript,prototype-chain,Javascript,Prototype Chain,希望我的问题清楚,我有以下代码: function Pane(){ } Pane.prototype.testo = function (){ console.log("I'm a function"); } TileBased.prototype = new Pane(); function TileBased(){ } TileBased.prototype.test = function (){ console.log("I'm a function"); } Level.pr

希望我的问题清楚,我有以下代码:

function Pane(){
}
Pane.prototype.testo = function (){
  console.log("I'm a function");
}

TileBased.prototype = new Pane();
function TileBased(){
}
TileBased.prototype.test = function (){
  console.log("I'm a function");
}

Level.prototype = new TileBased();
function Level(){
  console.log(this instanceof Pane); // -> true
  this.test();
  this.testo();
}

testLevel = new Level();
这里,this.test打印出
我是一个函数
好吧,但是this.testo抛出:
this.testo不是一个函数

编辑:
事实证明,我淡化了太多,考虑的代码太少。这里的代码是有效的。在我的程序的完整版本中,我制作了一个名为level的数组,并将
newlevel
赋值给一个名为level的变量。在我的项目目录中搜索“level”后,我发现我的变量名有冲突。

您正在覆盖TileBase从窗格继承的方法,因为您在声明原型后重新定义了它

更新以包括工作和非工作代码笔

查看此复制错误的代码笔:

你得走了

function TileBased(){
}
在第一次使用Tilebased之前

TileBased.prototype = new Pane();
试试这个

function Pane(){
}
Pane.prototype.testo = function (){
  console.log("I'm a function");
}

function TileBased(){
}
TileBased.prototype = new Pane();
TileBased.prototype.test = function (){
  console.log("I'm a function");
}

Level.prototype = new TileBased();
function Level(){
  console.log(this instanceof Pane); // -> true
  this.test();
  this.testo();
}

testLevel = new Level();

使用代码笔交换代码行:查看这里

我刚刚将上面的代码粘贴到JSFIDLE中,结果是真的,我是一个函数,我是一个函数。没有看到错误。作为记录,我无法在控制台中重现您的错误,通过检查对象,原型链似乎还可以。这是我第一次使用原型链,所以我认为我做错了什么。。。但问题出在别处,刘易斯让我意识到。。。我只是有冲突的变量名。很抱歉……我会在几分钟后删除。@DominicGrenier您不必因为犯了错误就删除问题。这就是在这里提问的全部意义。您可以添加您的解决方案或解释您在问题中做错了什么。函数定义被提升,因此不管他在哪里定义函数,解释器都会将其移到顶部anyway@DimitrisKaragiannis这与定义的位置无关,更重要的是他定义了Tilebased的原型,
tilebase.prototype=…
然后立即在下一行覆盖它,即
tilebase=function(){}
问题一定在别处,因为即使您的建议也不起作用。我会四处看看,让你知道。在精神上运行代码不会让我感到惊讶,因为它有一个错误,而且我在控制台中没有遇到他的问题either@DominicGrenier是的,这很奇怪。它在代码笔中运行良好,但我遇到了与您最初所遇到的相同的错误,即未定义函数。