this的那点事
2018-06-24 00:49:31来源:未知 阅读 ()
对于很多初学者,this总是搞得我们晕头转向。
现在,我就简单的总结一下关于this的那点事。
this在函数定义时经常是不能确定的,只有在函数执行的时候才能最终确定this的归属。this总是指向最后调用它的对象,那么怎么知道到底是谁调用的呢?其实很简单,我们知道函数调用的其中一种方法就是利用call.下面就来简单的分析一下怎么利用call来判断调用函数的对象到底是何方神圣。
先来看看call是怎么来使用的:
fun.call(thisArg, arg1, arg2, ...)
thisArg:
在fun
函数运行时指定的this
值。
需要注意的是,指定的this
值并不一定是该函数执行时真正的this
值,如果这个函数处于非严格模式下,则指定为null
和undefined
的this值会自动指向
全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this
会指向该原始值的自动包装对象。
arg1, arg2, ...:
指定的参数列表。
知道了call的用法,就可以开始this的分析之旅了。
例子1:
function test() { var name = 'test'; console.log(this.name); //undefined } test();
test() 等价于 test.call(undefined) ,这时的thisArg为undefined,所以this指向全局对象(浏览器中为window对象),所以this.name为undefined。
例子2:
1 var obj = { 2 name: 'tang', 3 func: function () { 4 var name = 'func'; 5 console.log(this.name); 6 } 7 }; 8 var test1 = obj.func();//tang 9 var test2 = obj.func; 10 obj.func(); //tang 11 test2(); //undefined
第8行 test1=obj.func(),赋值时执行函数,obj.func()等价于obj.func.call(obj),thisArg为obj,this指向obj,this.name为tang;
第10行obj.func() 等价于 obj.func.call(obj) ,这时的thisArg为obj,即this指向obj,所以this.name即为tang;
第11行test2()等价于test2.call(undefined),所以this指向全局对象(浏览器中是window);
第8行和第9行的区别在于赋值的时候有没有运行函数,第8行赋值的就运行函数,所以this指向obj,而第9行赋值时没有运行函数,只是把函数赋值给test2,所以this的指向还得等调用函数时才能确定,在第11行调用函数时才能确定。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- javascript的常用方法 2020-03-08
- 高效率JavaScript编写技巧整理 2020-02-15
- javascript中的运算符 2019-10-29
- XML+XSL 与 HTML 两种方案的结合 2019-10-12
- javascript —— this 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash