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

时间:2017-01-20 16:09:49

标签: 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.prototype = new TileBased();
function Level(){
  console.log(this instanceof Pane); // -> true
  this.test();
  this.testo();
}

testLevel = new Level();

在这里,this.test打印I'm a function好了但是this.testo抛出:this.testo is not a function

编辑: 原来我把它浇了太多,并且考虑的代码太少了。这里的代码有效。在我的程序的完整版本中,我创建了一个名为level的数组,并将new Level分配给名为level的变量。在搜索" level"之后我发现了通过我的项目目录,我有变量名称冲突。

1 个答案:

答案 0 :(得分:0)

你重写了Tilebased从Pane继承的方法,因为你在声明原型之后重新定义了它;

更新包含工作和非工作的CODEPENS

查看此codepen以重现错误:http://codepen.io/anon/pen/KaWGpW

你需要移动

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();

使用交换的行工作codepen:在此处查看http://codepen.io/anon/pen/wgJERB