JS中的“this”
来源:互联网 发布:大数据算法 王宏志 编辑:程序博客网 时间:2024/06/05 06:27
1. this的使用
关于this,懂点Java就应该知道,this有以下用法:
1、在类的方法定义中使用的this关键字代表调用该方法对象的引用。
2、当必须指出当前使用方法的对象是谁时,要使用关键字this。
3、有时使用this可以处理方法中成员变量和参数重名的情况。
4、this可以看做是一个变量,它的值是当前对象的引用。
简而言之,就是谁调用的含有this的语句,this就指向谁
来个例子:
var member = 88;var obj = { member: 12, getMember: function(){ alert(this.member); }};obj.getMember(); //12(obj.getMember)(); //12(obj.getMember = obj.getMember)(); //88//obj.getMember() 中调用getMember的方法的是obj,obj.getMember是成员的访问,而getMember()是函数的调用,且前者的优先级是高于后者的,先执行的是obj.getMember,所以this 就是 obj//(obj.getMember)() 与前面的相比,就是增加了一对括号,提高了优先级,但是本质上这个括号的加上的结果就是执行顺序还是没有改变,因此 this 就是 obj//(obj.getMember = obj.getMember)() 在函数调用之前先执行的是一个赋值语句,赋值语句的优先级本身是比较低的,加上括号提高了优先级,执行完赋值语句就相当于下面的效果 (funtion(){ alert(this.member); })();此时的this 就是 window
当然通过apply,call,bind还是可以修改this的,当然这三种方法也是有区别的,我们来顺便看看.
2. apply,call,bind 的使用
var obj1 = { member: "Linda", getMember: function(){ return this.member; }, sayName: function(){ alert(this.getMember()); }};var obj2 = { member: "Lily", getMember: function(){ return this.member; }};obj1.sayName.call(obj2); //Lilyobj1.sayName.apply(obj2); //Lilyobj1.sayName.bind(obj2)(); //Lily
bind的使用方法很明显是不同的,call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,所以需要加上()再调用的。
2. apply,call 的区别
var obj1 = { member: "Linda", getMember: function(){ return this.member; }, sayName: function(age, friend){ alert(this.getMember() + "今年" + age + "岁,朋友有" + friend); }};var obj2 = { member: "Lily", getMember: function(){ return this.member; }};obj1.sayName.apply(obj2, ["19", "Vam"]); //Lily今年19岁,朋友有Vamobj1.sayName.call(obj2, "19", "Vam"); //Lily今年19岁,朋友有Vam
很明显可以通过上面的例子看出,call和apply传参数的方式是略微有差别的,call需要将参数一个个用逗号隔开,直接列举,而apply是将要传的参数放在一个数组里的。
1 0
- js中的this
- js中的this关键字
- 关于js 中的 this
- js中的this详解
- js 中的this
- JS中的this
- JS中的this用法
- js中的this基础
- JS中的this关键字
- 在js中的this
- 【JS】JavaScript中的this
- js中的this
- js 中的this
- js中的this
- JS中的this理解
- js中的this
- JS中的this
- js中的this指针
- struts2框架编写web的基本方法
- 【NOIP 2013 Day2 T1】积木大赛(贪心)
- Android 源码设计及源码编译
- 初学者如何查阅自然语言处理(NLP)领域学术资料
- 二分法
- JS中的“this”
- [LeetCode][c++][LeoLiuX]49. Group Anagrams
- springMVC一个Controller实现多个方法
- 南阳理工学院软件、计科16级新生联合月赛(10月)
- JSTL 常用标签练习--Core标签库
- Java基础部分个人学习记录
- Qt error:: write access violation at: 0x1, flags=0x0 (first chance)
- 随机数
- iOS 将xib 视图中的视图拖拽到响应的ViewController中