关于this
2016-02-16 15:32
295 查看
一:全局环境中的this指的是window对象
二:作为对象的方法调用
当函数作为对象的方法被调用时,this指向该对象
例子:
三:作为普通方法调用
当函数不作为对象的属性被调用,而是作为普通函数函数被调用,this指向全局对象,也就是window
例子1:
此时this是指向window对象。
如上图运行结果可以看出,在函数内部定义变量,未使用var 声明,则指向全局变量。可以对比结果
例子2:
如上图所示,作为普通函数调用时,this指向window 。作为对象属性调用时,this指向该对象。this是在对象内部函数定义的,但是调用的时候是作为普通函数调用,多以this依然指向window。
this的指向,是根据调用时的环境,而非定义时的环境。
以前看闭包的资料时,看到思考题,当时还似懂非懂,出处/article/1257211.html
六、思考题
如果你能理解下面代码的运行结果,应该就算理解闭包的运行机制了。
Js代码
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window
这个思考题的执行结果,如图所示:
第一步 object.getNameFunc() 结果是一个匿名函数,object.getNameFunc()()第二个括号调用匿名函数,并执行。此时是作为普通函数被调用的,所以this是指向全局变量,所以name输出为The window 。这里的结果应该是跟this有关系,但是现在还是不太清楚,作者把这道题目写在闭包的这个位置的意图,得再研究研究。
如果需要访问My object 就把this保存起来,如下图
四:改变this指向,关于call()和apply();
跟普通函数的调用相比,用call()或者apply()可以改变传入的this;
c
参考资料:《JavaScript设计模式与开发实践》 曾探
未完待续
18:00:54
二:作为对象的方法调用
当函数作为对象的方法被调用时,this指向该对象
例子:
三:作为普通方法调用
当函数不作为对象的属性被调用,而是作为普通函数函数被调用,this指向全局对象,也就是window
例子1:
此时this是指向window对象。
如上图运行结果可以看出,在函数内部定义变量,未使用var 声明,则指向全局变量。可以对比结果
例子2:
如上图所示,作为普通函数调用时,this指向window 。作为对象属性调用时,this指向该对象。this是在对象内部函数定义的,但是调用的时候是作为普通函数调用,多以this依然指向window。
this的指向,是根据调用时的环境,而非定义时的环境。
以前看闭包的资料时,看到思考题,当时还似懂非懂,出处/article/1257211.html
六、思考题
如果你能理解下面代码的运行结果,应该就算理解闭包的运行机制了。
Js代码
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window
这个思考题的执行结果,如图所示:
第一步 object.getNameFunc() 结果是一个匿名函数,object.getNameFunc()()第二个括号调用匿名函数,并执行。此时是作为普通函数被调用的,所以this是指向全局变量,所以name输出为The window 。这里的结果应该是跟this有关系,但是现在还是不太清楚,作者把这道题目写在闭包的这个位置的意图,得再研究研究。
如果需要访问My object 就把this保存起来,如下图
四:改变this指向,关于call()和apply();
跟普通函数的调用相比,用call()或者apply()可以改变传入的this;
c
参考资料:《JavaScript设计模式与开发实践》 曾探
未完待续
18:00:54
相关文章推荐
- Qt应用程序打包
- java常用算法之最长回文子串(Longest Palindromic Substring)
- 使用Badboy自动录制脚本
- if语句 return;结尾
- Fake API工具:interfake快速入门
- SQL语句中—删除数据
- C# ref和out 关键字
- 有关**迭代学习**控制的一些基本概念
- Wamp常见问题记录
- A way to CQRS and DDD
- hdu 1712 裸分组背包
- 3295: [Cqoi2011]动态逆序对 树状数组套主席树
- 深入理解abstract class和interface
- Android textview文字对齐换行问题
- js-读取系统时间
- Socket编程大总结
- iOS 【错误:'Changing the delegate of a tab bar managed by a tab bar controller is not allowed.'】
- bzoj1492 货币兑换 CDQ分治
- 为什么要学习Linux?
- The Data Scientist's Toolbox --- R程序包安装