this关键字详解
发布时间:2020-12-14 02:31:14 所属栏目:Windows 来源:网络整理
导读:关于this的绑定 默认绑定 this 默认 绑定到 windows 在全局环境中,this默认绑定到 windows 函数独立调用时,this默认绑定到 windows 被嵌套函数独立调用时, this 默认绑定到 windows IIFE 立即执行函数, 实际上是函数申明之后立即调用 闭包函数, 是独立调
关于this的绑定默认绑定 this 默认 绑定到 windows
隐式绑定在方法调用时(被对象包含的函数,被对象直接调用时),this隐式的 绑定到该对象上。 ``` var a = 0; function fun(){ console.log(this.a) } var o = { a : 1; fun : fun; } o.fun() // 1 ``` 当对象嵌套时,依然是直接对象 ``` var a = 0; function fun(){ console.log(this.a) } var o1 = { a : 1; fun : fun; o2:{ a : 2; fun : fun; } } // fun函数的直接对象o1 o1.fun() // 1 // fun函数的直接对象是O2 o1.o2.fun() // 2 ``` 显示绑定通过 call(),bind(),apply() 方法,把对象绑定到this上。叫做显示绑定。 ``` var a = 1; functiont fun(){ console.log(this.a) } var o = { a : 0; } fun() // 1 独立调用 fun.call(obj); // 0 ``` 在javascript中新增了一些内置函数,具有显式绑定的功能,例如数组的迭代方法:map()、forEach()、filter()、some()、every() ``` var a = 'windows'; function fun(e){ console.log(e,this.id) } var o = { a : 'o-object'; } [1,2,3].forEach(fun) // 1 'windows' 2 'windows' 3 'windows' // 当我们指定了绑定对象,this 就会改变 [1,3].forEach(fun,obj ) // 1 'o-object' 2 'o-object' 3 'o-object' ``` 隐式丢失指的是,隐式绑定的对象有时候会出现绑定对象的丢失,从而默认绑定到windows,主要是赋值操作。
var a = 0; function fun(){ console.log(this.a) } var o = { a : 2; fun : fun; } // 在这里出现赋值操作,使得o.fun 有了新的别名bar 造成了隐私丢失。 // 因为只是把fun函数赋给了foo,而foo与o对象则毫无关系。 var foo = o.fun;
var a = 0; function fun(){ console.log(this.a); } var o = { a : 1; fun : fun; } // 其实 o.fun 在作为参数传递时候, 也是一个赋值操作。 // 同样的道理 只是把fun函数赋给了setTimeout 的一个形参 ,而与o对象则毫无关系。 setTimeout(o.fun,100) // 0
function fun(){ console.log( this.a ); } var a = 0; var o1 = {a : 1,fun : fun}; var p2 = {a : 2}; o1.fun() // 1 方法调用 //将o1.fun函数赋值给o2.fun函数,然后立即执行。相当于仅仅是fun函数的立即执行 (o2.fun = o1.fun)();//0 // 注意上下两种的区别 o2.fun = o1.fun; o2.fun() // 2 其实 在 javascript 内存角度上 O 和 o.fun 是存储在不同的地址上的。 只有o.fun() 才算是 从o 对象上去调用fun。否则,默认的是直接调用方法。因此绑定到了windows上。 (o2.fun = o1.fun)();//0 (false || 01.fun)();//0 (1,o1.fun)();//0
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-phone-7 – 全景wp7 mvvm中的静态和动态全景项目
- windows – 在VMWare Workstation 7.1.0中输入虚拟Server20
- windows – 如何从第N个位置获取批处理文件参数?
- windows下打开binlog
- windows – 为什么我的一些客户在短时间内失去了HTTP连接?
- 远程桌面,身份验证错误:要求的函数不正确等解决办法
- Windows – 远程站点中的工作站不了解新的AD领域
- Windows Azure:删除附加到不存在的VM的磁盘
- 如何创建Windows虚拟机
- Windows版 SQL Server 2017 AlwaysOn AG 自动初始化测试报告