在javascript中对这个词的一些误解

时间:2014-11-15 14:30:05

标签: javascript

我有这个JavaScript块:

function List() {
 List.makeNode = function() {
  return {data: null, next: null};
 };

 this.start = null;
 this.end = null;

 this.add = function(data) {
  //some code
  this.end.data = data;
 };
}

我的问题是关于这些行中 this 一词的含义:

 this.start = null;
 this.add = function(data)

提前谢谢你。

2 个答案:

答案 0 :(得分:1)

this指向对象的实例。所以,如果你这样做:

var potato = new List();
马铃薯将分配(很多)属性,称为startend。您可以像这样访问它们:

potato.start /* equals null, because the 
             function constructor set it to null 
             using the this keyword,
             this.start = null;
             */

你可以自己尝试一下。启动控制台(Ctrl + shift + j)并输入:

function Foo(){
  this.length = 'bar';
  this.stuff = 'buzz';
}

现在尝试将其分配给变量:

var foo = new Foo;

并访问这些属性。

foo.length
// returns 'bar'

foo.stuff
//returns 'buzz'

如果你改变了这些:

foo.length = 'I have no length';

它只适用于那个实例,所以如果你这样做:

var foo2 = new Foo();

foo2.length
//still returns 'bar'

foo.length
// still 'I have no length'

答案 1 :(得分:0)

this.start = null;
当您将List()类用作构造函数时,

初始化List()类的实例上的属性start。如果您愿意,它将允许您向List.start附加其他属性或方法,就像List.end与List.end.data一样。

所以

this.start = null;

允许你说,

this.start.newProperty = "new"; 

如果你没有初始化this.start,大多数浏览器会抛出一个错误,很可能在你试图创建新属性时停止你的程序。

this.add = function(data) {}

为List类创建一个方法,这样当你创建一个List实例时,你可以像List.add()

一样

用法:

var myList = new List(); // Create a new instance of the List() class.

myList.add("my data"); // Store "my data" in myList.end.data via the add() method

alert(myList.end.data); // Would show "my data" in an alert box.

希望这能澄清一些事情。