2

我有一个代码如下:

function Cell(center) {
  this.center_cell = center;

  calc_neighbours = function() {
    var points = this.center_cell; 
    console.log(points); // displays undefined 
  };

  this.get_neighbours = function() {
    return calc_neighbours();
  };    
}

var c_points = new Array(8,2);
var cell = new Cell(c_points);
cell.get_neighbours();

放置上述代码后,函数cell.get_neighbours()显示未定义。

现在,如果我稍作更改并具有以下列出的代码,则函数会显示这些值。为什么会发生这种情况是因为 javascript 的 object 属性中的函数范围或变量范围。

这是显示值的代码:

function Cell(center) {
  this.center_cell = center;

  this.calc_neighbours = function() {
    var points = this.center_cell; 
    console.log(points); // displays undefined 
  };

  this.get_neighbours = function() {
    return this.calc_neighbours();
  };    
}

我没有对函数用法进行任何更改。IE

 var c_points = new Array(8,2);
 var cell = new Cell(c_points);
 cell.get_neighbours();
4

3 回答 3

5

this.get_neighbours = function(){
    return calc_neighbours();
};  

您在calc_neighbours没有提供上下文的情况下调用。这使得上下文成为全局变量 ( window),其中pointsis undefined

这就是为什么你必须把它称为

this.calc_neighbours();
于 2013-07-29T06:22:12.830 回答
0

“this”是必需的,以便设置正确的上下文。没有“this”,一切都绑定到全局上下文(窗口),在这种情况下这是不对的。因此,如果没有这个,它将无法工作。这与 Java 和其他一些 OO 语言的编码方式略有不同。

于 2013-07-29T06:26:58.957 回答
0

要在此处或其他地方强制上下文,您还可以使用call

calc_neighbours.call( this )
于 2013-07-29T06:30:26.607 回答