在做聊天室的过程中,我遇到了一个小问题,在javascrip中,有没有和c语言中的静态变量类似的对象呢?
答案就在闭包之中。
而说到闭包,又得说说那个我视之如地雷的this。this搞明白了,闭包这东西耍起来能不溜吗。
总结起来,是很简单的,只有在函数作为对象的方法被调用时,this才指向这个对象,否则,皆指向window对象。
举个例子
var obj={ //obj为对象
num:1,
getNum:function(){ //getNum为对象的方法
alert(this.num);
}
};
obj.getNum(); //输出1
但是,要是用另一个变量引用这个对象的方法呢
num=2;
var obj={
num:1,
getNum:function(){
alert(this.num);
}
};
var wind=obj.getNum;
wind(); //2
这时的this指向window。
我们已经知道,JavaScript可以从构造器中创建对象,那么理论上说,用函数构造器也可以实现例一的功能。
var myfuc=function(){
this.name='window';
}
var obj=new myfuc(); //构造器返回一个对象,而myfuc是这个对象里的方法。
alert(obj.name); //window