一直对js的this不怎么理解,最近看了JavaScript 语言精髓的相关章节,有点清晰的理解了,记录记录
/*

 来自: JavaScript 语言精髓

 方法:当一个函数被定义为对象的一个属性时,我们称它为一个方法.

 this : 在函数访问this时,this被绑定到了 全局对象.

 */

//全局函数
var log = function(msg){
document.writeln("<br>" + msg + "<br>");
}; log("**************thistest.js***************"); //定义一个全局变量
var value = 100; //函数
var add = function(a, b){
var value = 11;
//访问内部变量
log("add:value = " + value); // 输出 add:value = 11
//此时访问this时,this绑定的全局对象,如 this.value 可以访问到上面定义的 value
log("add:this.value = " + this.value); // 输出 100
return a + b;
} // add是一个函数,在add里访问 this ,this绑定到的是全局对象 add(1, 2);
//输出:
//add:value = 11
//add:this.value = 100

下面定义一个对象

//对象
var myObj = { //对象的属性
value:0, //方法
increment:function(inc){ //此时访问this时,this绑定的时myObj对象
log("myObj.increment():myObj.value = " + this.value);//输出 myObj.value 的值 //调用一次 value的值增加1
this.value += typeof inc ==='number'?inc : 1; } };

有时候我们在方法内部会定义函数,那么函数怎么调用对象属性呢,如果在函数内容直接用this是访问不到对象的

//对象
var myObj = { //对象的属性
value:0, //方法
increment:function(inc){ //此时访问this时,this绑定的时myObj对象
log("myObj.increment():myObj.value = " + this.value);//输出 myObj.value 的值 //调用一次 value的值增加1
this.value += typeof inc ==='number'?inc : 1; //定义内部函数,注意还是函数,所以函数内部访问this还是只能访问到 全局对象
var inFun = function(){
//此时访问this时,this绑定的全局对象,如 this.value 可以访问到上面定义的 value
log("myObj.increment.inFun:this.value = " + this.value);
};
inFun();
} };

为了能在inFun函数内访问到myObj对象,我们先把myObj对象保存在一个变量里,

//对象
var myObj = { //对象的属性
value:0, //方法
increment:function(inc){ //把当前对象myObj引用保存在self变量,随后的函数就可以访问self 来代替访问myObj对象
var self = this; //此时访问this时,this绑定的时myObj对象
log("myObj.increment():myObj.value = " + this.value);//输出 myObj.value 的值 //调用一次 value的值增加1
this.value += typeof inc ==='number'?inc : 1; //定义内部函数,注意还是函数,所以函数内部访问this还是只能访问到 全局对象
var inFun = function(){
//此时访问this时,this绑定的全局对象,如 this.value 可以访问到上面定义的 value
log("myObj.increment.inFun:this.value = " + this.value);
//
log("myObj.increment.inFun:myObj.value = " + self.value);
};
inFun();
} };

给 myObj增一个double方法

myObj.double = function(){
var self = this;
var helper = function(){
//此处不能用 this.value 访问到myObj.value的值
//add函数前的this可以省略,也可以用 this.add(a,b);
self.value = add(self.value, self.value);
};
helper();
};

调用double方法,即可使用myObj.value的值翻倍

最新文章

  1. Flex 布局教程:语法篇
  2. Excel 导出
  3. 关于多线程情况下Net-SNMP v3 版本导致进程假死情况的跟踪与分析
  4. Unity Tidy Tile Pack #1
  5. YII页面跳转
  6. HTML5 中canvas支持触摸屏的签名面板
  7. Cookie的使用与实现记住用户名案例
  8. bzoj2561: 最小生成树
  9. 【C语言】-循环结构-while语句
  10. TR069协议向导——一个帮助你了解TR069协议的简明教程(一)
  11. 如何在一个网站或者一个页面,去书写你的JS代码
  12. 搭建Windows下Java Web开发环境
  13. hdu 4598 Difference(奇圈判定+差分约束)
  14. 去除List列表中反复值(稍作调整,也适合于List&amp;lt;T&amp;gt; 和 List&amp;lt;?&amp;gt;)
  15. HDU-4371-Alice and Bob
  16. Linux学习历程——SUID、SGID、SBIT简介
  17. Tomcat系列(9)——Tomcat 6方面调优(内存,线程,IO,压缩,缓存,集群)
  18. 在同一个Apache服务器软件上部署多个站点的基础方法
  19. Unity3D UGUI下拉菜单/Dropdown组件用法、总结
  20. Fetch API 接口参考

热门文章

  1. [LeetCode]3.无重复字符的最长子串(Java)
  2. linux下用crunch工具生成密码
  3. 用Stegsolve工具解图片隐写的问题
  4. 大家好 这里是yi术家
  5. Renix签名字段详解——网络测试仪实操
  6. 基于angularJs坐标转换指令(经纬度中的度分秒转化为小数形式 )
  7. oj教程--向量容器
  8. mapreduce—shuffle图解
  9. PDF格式简单分析
  10. JZ-065-矩阵中的路径