Javascript中的this


this是Javascript中的一个关键字,主要是在函数的内部使用。

function run(){
   this.name='Kim';
}

当函数调用时,this就代表一个自动产生的一个对象,而这个对象具体代表的谁呢?那就要看函数的具体应用环境了。

以下是关于this的几种不同调用时的情况。



第一种:最基本的函数调用

这种是函数的基本用法,直接在全局作用域中调用,那么this代表的就是全局对象window

function run(){
  return this.name='Kitty';
}
alert(run());    // Kitty


证明this代表的是window,在函数的内部和外部都能访问到name

function run(){
  return this.name='hello';
}
alert(run());   // hello
alert(window.name);   //hello



第二种:函数作为对象的方法调用

此时this代表的就是方法所属的那个对象

 function run(){
    alert(this.name);
 }
 var box=new Object();
 box.name='Kim';
 box.run=run;
 box.run();    // Kim



第三种:函数作为构造函数调用

这里所谓的构造函数,就是通过new关键字,生成的一个新的object对象,那么this指的就是这个新的对象

/*
 alert(typeof box);     //object  注意:这里的函数通过new关键字 构成的构造函数创建的对象是object类型的而并非function类型的
 var box=new Function();
 alert(typeof box1);   //function
*/

 var name='hello';
 function run(){
   this.name='Kim';
 }
 var box=new run();  
 alert(box.name);           //Kim
 alert(name);  //hello   因为run里面的name指的是新生成的对象,而并非全局的对象,因此全局对象中的name并没有改变 



第四种:函数的apply()调用

这个apply()是函数对象的一个方法,用于改变这个函数的调用对象(或者说调用作用域),它的第一个参数指定的就是被哪个对象调用.

var name='Kim';
function run(){
  alert(this.name);
}
run();//这里直接调用,那么this代表全局对象

新创建一个对象

var o={};
o.name=1;
o.run=run;  
o.run();  // 结果是1   
o.run.apply(o);   //用apply指定调用对象,这里指定为o,  结果是1      this就是o对象
alert(o.run.apply());   //当apply()参数为空,默认是全局对象,等价于apply(this). 这里改变了函数的调用对象为全局对象,那么结果就是Kim                         // this就是window对象



总结

1.全局范围内使用this,它代表全局对象

2.函数调用,它代表全局对象

3.作为方法调用box.run(),它代表方法所属的对象

4.通过构造函数new run(),它代表这个新创建的对象
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值