博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于this的指向
阅读量:5066 次
发布时间:2019-06-12

本文共 1594 字,大约阅读时间需要 5 分钟。

一个函数中的this关键字的指向——通常情况,如果一个函数所属一个对象,那么这个函数被这个函数所属的对象调用执行,那么这个this就指向这个这个函数所属的对象

注意:函数中的this指向是在调用时(运行时)决定的,而不是在函数定义的时候决定的。

例1.

function test(){  return this;  }test();            //windowwindow.test();     //window

这是一个函数声明,由于 test 所属于window对象,在我们调用test()的时候实际上调用test的对象是window(全局对象),所以this指向window。

例2.

var obj = {  test:function(){    return this;  }}obj.test();  //obj

因为test所属于obj对象,并且由obj对象调用,所以this指向obj。

例3.

var obj  = { a:{    test:function(){      return this;    }  }}obj.a.test();

这里的test所属于a对象,并且由a对象调用,所以this指向a。

虽然a属于obj,但 test函数 所属于a对象,而不属于obj对象。
例4.

var test = function(callBack){  callBack();}test(function(){  console.log(this);   //window})

这个回调函数里面的this指向window,因为这个匿名函数由参数调用,这个调用者(也就是这个参数)不所属于任何对象,所以默认的指向了window。

例5.

var test = function(){  arguments[0]();}test(function(){  console.log(this);  //arguments})

这个是由arguments对象调用,在传递参数时js自动把传递的匿名函数挂载到了arguments对象下,所以这个匿名函数也是所属于arguments对象的,所以this指向了arguments。

例6.

var obj = {str:"1"};var obj2 = {  test:function(){    return this;  }}obj2.test();      //obj2obj.Fn = obj2.test;obj.Fn();         //objvar temp = obj2.test;temp();          //windowwindow.temp()    //window

由最终调用执行test的对象决定了test内的this的指向。

例7.(new关键字)

function test(){  ******  ****** ---[[return undefined]]---   }Test();

如果不使用new关键字调用执行,test里面的this指向调用执行test的对象。

如果不显示的在代码里面使用return,那么这个函数内部会默认的返回undefined。

function Test(){  ******  ******  ---[[return this]]---}var A = new Test();

如果使用new关键字调用执行,构造函数里面的this指向创建的实例对象A。

如果不显示的在代码里面使用return返回({},[],RegExp, Date, Function),那么这个构造函数内部会默认返回this(也就是创建的实例对象A)。

转载于:https://www.cnblogs.com/liu-di/p/10396083.html

你可能感兴趣的文章
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
css3动画属性
查看>>
Mongodb 基本命令
查看>>
控制文件的备份与恢复
查看>>
软件目录结构规范
查看>>
mysqladmin
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
java学习笔记之String类
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>