2016-04-09 123 views
0

我有一个我正在创建的节点对象。下面是代码的构造节点对象中的相关位:未捕获类型错误javascript方法

function Node(x,y,traversable){ 
    ... 
    this.traversable = traversable; 
    ... 
    Node.isTraversable = function(){ return this.traversable}; 
} 

然后,我有一个嵌套循环它创建节点的电网和试图访问某些节点的方法。 “map”是一个字符串数组。每个字符串表示编码地图上的一条线。地图上的每一行都具有相同的长度,并且该行中的每个字符都是“e”或“o”,表示可穿越的空间或障碍物空间。下面是相关代码:

... 
var nodes = []; 
... 
for (var i=0;i<map.length;i++){ 
    var array = []; 
    nodes.push(array); 
    for(var j=0;j<map[i].length;j++){ 
     var temp = new Node(i,j,map[i][j]=='o'||map[i][j]=='O' ? false : true); 
     if(temp.isTraversable()) console.log('check ok'); 
     ... 
    } 
} 

的错误我得到的回复是:我为什么不能访问,我在构造函数中定义的函数来我

Uncaught TypeError: temp.isTraversable is not a Function 

任何人都可以解释一下吗?我是JavaScript新手,特别是面向对象的JavaScript。提前致谢!

+2

使用'this.isTraversable'不节点 – JordanHendrix

+1

正确答案@JordanHendrix – vahanpwns

+1

谢谢大家! – nbk

回答

1

夫妇方法可以做到这一点:

function Node(x,y,traversable){ 
    ... 
    this.traversable = traversable; 
    ... 
    this.isTraversable = function(){ return this.traversable}; 
} 

你应该总是用在上面的代码this,为您的错误的原因是temp.isTranversable是不是一个函数,与上面的代码中,this将引用temp现在。

,或者直接将其添加到原型:

function Node(x,y,traversable){ 
    ... 
    this.traversable = traversable; 
    ... 

} 

Node.prototype.isTraversable = function(){ return this.traversable}; 
+1

非常感谢! – nbk