2016-11-10

最基本的:this指代的是调用函数的对象

函数的调用分4种情况:a:对象调用,b:普通函数调用,c:构造函数调用,d:call和apply调用。

下面分别对各种调用方法中的this进行分析。

1 对象中的this

 1 var a="b";
 2 
 3 var obj={
 4   name:"a",
 5   say:function(){
 6      console.log("Hello "+this.name);
 7   }
 8 }
 9 
10 obj.say();// "Hello a"

说明:该this绑定的是obj这个对象,也可以理解为调用这个函数的对象

exam:

var xx=obj.say;
xx();// “nodejs环境下为Hello undefined,浏览器环境下为Hello b”;

2 function中的this

1 function setb(xx){
2   this.b=xx;
3 }
4 var o={b:1};
5 o.setb(2);//b=2;

说明:this绑定的是调用该函数的对象,在setb(1)中this指代的window或global对象。

 

3 构造函数中的this

1 function A(){
2   this.name="a"3   this.age=10;
4 }

说明:this绑定的是这个构造函数。构造函数通过new关键字来调用,过程为:首先新建一个对象,并将该对象的prototype设置为该函数,调用函数时将this绑定新建的对象

4 call和apply

 

补充

在浏览器中和在nodejs中定义全局变量是不一样的。浏览器中var x=1;就可以将x设置为window全局变量,而在nodejs中,声明全局变量为x=1;nodejs中var x=1;声明的并不是全局变量。

分别在浏览器和nodejs环境中运行test函数。

1 var x = 1;
2 function test(){
3  console.log (this.x);
4 }

浏览器环境下得到的是1,nodejs环境下是undefined。

参考:

http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html

posted on 2016-11-10 15:39  Jennica  阅读(140)  评论(0编辑  收藏  举报