我有这个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)
提前谢谢你。
答案 0 :(得分:1)
this
指向对象的实例。所以,如果你这样做:
var potato = new List();
马铃薯将分配(很多)属性,称为start
和end
。您可以像这样访问它们:
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.
希望这能澄清一些事情。