码迷,mamicode.com
首页 > 其他好文 > 详细

this的指向

时间:2019-07-16 08:48:47      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:绑定   定义   介绍   关于   全局变量   bin   new t   UNC   改变   

this的指向在很多时候会把人弄的很懵,但是笔者可以肯定的说,你看完这篇文章绝对能弄懂this的指向。

在不同的场景this分别指向谁:

一:纯粹的函数调用

var x = 1;
function test() {
console.log(this.x) //指向window,输出1
}
test() //这个其实是window.test()的简写
1
2
3
4
5
此时是window调用的test方法,所以函数体里的this就指向了window。
二:作为对象的方法调用

function test () {
console.log(this.x) //指向obj,输出2
}
var obj = {};
obj.x = 2;
obj.m = test;
obj.m();
1
2
3
4
5
6
7
此时的test函数被用作了obj对象的方法来调用的,所以test里的this就指向了obj。
三:作为构造函数调用

var x = 4; //定义全局变量,为了用来测试
function Test () {
this.x = 11; //this指向newObj
}
var newObj = new Test();
console.log(newObj.x) //输出11
console.log(x) //输出结果为4,表明全局变量没有被this.x影响
1
2
3
4
5
6
7
四:apply调用后

var x = 0;
function test() {
console.log(this.x);
}
var obj = {};
obj.x = 1;
obj.m = test;
obj.m.apply(); //0
test.apply(obj); //1
new test(); //undefined
test.apply(); //0
1
2
3
4
5
6
7
8
9
10
11
apply()是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。因此,这时this指的就是这第一个参数。
关于改变this的其他方法,如bind(),call()与apply的区别请到此观看:更改this指向的方法详细介绍。

总结:

通常在函数中的this指向的是调用函数的哪个对象(谁调用指向谁)
事件函数中的this通常指向的是绑定事件的事件源元素
构造函数中的this,(使用new调用构造函数创建对象),通常指向的是new所创建出来的对象本身
全局范围的this通常指向的是全局对象(浏览器中是window)
一句话总结:

关于this的指向问题,我们可以用一句话简单又好记的去描述它:谁调用就指向谁!
---------------------

this的指向

标签:绑定   定义   介绍   关于   全局变量   bin   new t   UNC   改变   

原文地址:https://www.cnblogs.com/liyanyan665/p/11192636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!