一、函数调用,此时this是全局的也就是window

1 var c=function(){
2 alert(this==window)
3 }
4 c()//true

二、方法调用

var myObj={
value:2,
inc:function(num){
alert(this.value+num);
}
}
myobject.inc(1); //结果3,因为this指向myObj

注意:内部匿名函数不属于当前对象的函数,因此this指向了全局对象window

var myObj={
name:'myObject',
value:0,
increment:function(num){
this.value += typeof(num) ==='number'? num:0;
},
toString:function(){
return '[object:'+this.name+'{value:'+this.value+'}]';
}, getInfo:function(){
return (function(){
return this.toString();//内部匿名函数不属于当前对象的函数,因此this指向了全局对象window
})();
}
}
alert(myObj.getInfo());//[object window];
解决方法:
 var myObj={
name:'myObject',
value:0,
increment:function(num) {
this.value += typeof(num) ==='number' ? num : 0;
},
toString:function() {
return '[object:'+this.name+'{value:'+this.value+'}]';
},
getInfo:function(){
var This=this;//先把当前的this指向存起来
return (function(){
return This.toString();
})();
}
}
alert(myObj.getInfo());//[Object:myObject {value:0}]
三、用new关键字来新建一个函数对象的调用,this指向被绑定到构造函数的实例上
 var fn = function (status){
this.status = status;
}
fn.prototype.get_status = function(){
return this.status;
}
var test = new fn('my status');
alert(test.get_status);//my status,this指向test
四、apply/call调用
function MyObject(name){
this.name=name ||'MyObject';
this.value=0;
this.increment=function(num){
this.value += typeof(num) === 'number' ? num : 0;
};
this.toString=function(){
return '[Object:'+this.name+' {value:'+this.value+'}]';
};
this.target=this;
}
function getInfo(){
return this.toString();
}
var myObj=new MyObject();
alert(getInfo.apply(myObj));//[Object:MyObject {value:0}],this指向myObj
alert(getInfo.apply(window));//[object Window],this指向window
通过call和apply可以重新定义函数的执行环境,即this的指向,这对于一些应用当中是十分常用的。

最新文章

  1. 关于java中static的应用及一种常见错误
  2. 高清DVI编码器|上海视涛科技
  3. paip.c3p0 数据库连接池 NullPointerException 的解决...
  4. openssl mac中使用终端生成RSA私钥和公钥文件
  5. android-exploitme(二):安装apk熟悉测试环境
  6. C 语言指针怎么理解?
  7. SGU Volume 2
  8. MFC一个令人纠心的错误
  9. 2017 ZSTU寒假排位赛 #1
  10. vim 配置快捷以使复制可用
  11. 用spark导入数据到hbase
  12. 【CF802C】Heidi and Library(网络流)
  13. EF连接MySql数据库
  14. 图->有向无环图->求关键路径
  15. Data Persistence
  16. cad.net 利用win32api实现不重复打开dwg路径的文件夹(资源管理器)
  17. kubernetes控制器之DaemonSet
  18. locust 的使用
  19. 深入理解 Python yield
  20. 推荐10 款 SVG 动画的 JavaScript 库

热门文章

  1. Service Unavailable HTTP Error 503. The service is unavailable.
  2. Servlet的引入(即加入Servlet)
  3. cesium底图加载底图切换 基于天地图服务
  4. Unity学习之路——C#相关
  5. 【kmp】bzoj3620: 似乎在梦中见过的样子
  6. k8s 基于NFS部署storageclass pv自动供给
  7. Livid : 在 26 岁时写给 18 岁的自己
  8. VUE2.0声明周期钩子:不同阶段不同钩子的开启
  9. paper:synthesizable finit state machine design techniques using the new systemverilog 3.0 enhancements之enhanced coding styles
  10. html5音频audio对象封装成vue组件的方式调用以及setTimeout如何在vue2生效 (vue2正在熟悉中,ajax还是用jQuery来写舒服些,里面含有一些php写法可略过) 此网页应用在PC不考虑手机端