js中this的全面解析之绑定规则(一)
来源:互联网 发布:sql语句between 编辑:程序博客网 时间:2024/06/05 06:43
1.1 默认绑定
首先介绍的是函数调用类型:独立函数调用,在没有其他应用下的默认规则。
首先看以下代码
function foo(){ console.log(this.a);}var a = 2;foo();//2
我们可以看到调用foo()时,this.a被解析成了全局变量a,为什么,因为在上述例子中,函数调用了默认绑定,因此this指向了全局对象。
那么我们怎么知道这里应用了默认绑定呢?可以通过分析调用位置来看看foo()是如何调用的。在代码中,foo()是直接使用不带任何修饰的函数引用进行调用的,因此只能使用默认绑定,无法应用其他规则。
如果使用严格模式,则不能将全局对象用于默认绑定,因此this会绑定undefind:
function foo(){ "use strict "; console.log(this.a);}var a = 2;foo();//TyoeError:this is undefind
1.2 隐式绑定
另一条规则是调用的位置是否有上下文对象,或者说是否被某个对象拥有或者包含,不过这种说法可能会造成一些误导。
function foo(){ console.log(this.a );}var obj = { a : 2, foo:foo};obj.foo();//2
首先需要注意的是foo()的声明方式,及其之后是如何被当作引用属性添加到obj中的,但是无论是直接在obj中定义还是先定义再添加引用属性,这个函数严格来说都不属于obj对象。
然而,调用位置会使用obj上下文来引用函数,因此你可以说函数被调用时obj对象“拥有”或者“包含”它。
无论你如何称呼,当foo()被调用时,它的前面确实加上了对obj的引用,隐式绑定规则会把函数调用中的this绑定到这个上下文对象。
对象属性引用链只有上一层或者说最后一层在调用中起作用。
function foo(){ console.log(this.a);}var obj = { a : 12, foo : foo}var obj2 = { a : 2, obj : obj}obj2.obj.foo()//12
1.2.1 隐式丢失
type1 :
function foo(){ console.log(this.a);}var obj = { a : 2, foo : foo }var bar = obj.foo;var a = "happy new year";bar ();//happy new yaer
type2 :
function foo(){ console.log(this.a);}function doFoo(fn){ fn();}var obj = { a : 2, foo:foo}var a = "hello world";doFoo(obj.foo)//hello world
type3 :
function foo (){ console.log(this.a);}var obj = { a : 2, foo : foo}var a = "gril !";setTimeout(obj.foo,1000);//gril !
大家看了上述对this的解释,是否对this有了更加深刻的了解了呢?尽请看下期。
0 0
- js中this的全面解析之绑定规则(一)
- JavaScript中this之全面解析
- this的绑定规则
- 从 ECMAScript 规范来看 JS 的 this 绑定规则
- js中this的绑定与丢失
- js中this的绑定与丢失
- 通过实例全面解析JS中的This
- 全面解析JS中的this机制
- 【js学习之路】事件绑定函数中,将this换成调用对象导致的问题
- 方法内的函数 ---之js this绑定的不合理
- js中this指向的四大规则和示例
- js setTimeout 在类中,绑定this的方法
- 读you don't konw js 有感之this全面解析
- js中$(this)的简单技巧一
- 解析JS中this关键字
- PHP中this的绑定
- this全面解析
- js this机制的四种规则
- 【最新版lnmp编译安装】编译安装nginx1.10.2最新版、php7.0.12最新版、mysql5.7.16最新版
- 08适配器模式
- 调用android自带的json类解析出错!!!
- 快速排序算法
- 求帮忙 写一个自定义的圆形进度条
- js中this的全面解析之绑定规则(一)
- 基于TI-RTOS的CC2650DK开发(24)--- 最小化应用程序的内存占用
- 09装饰模式
- jzoj 2016.12.31 noip模拟赛A 总结
- UISearchBar中“取消”按钮的诡异问题
- 课程设计—电子词典
- 头大啊,运行报错求助。。。
- 10组合模式
- 求助:关于MAC下的用UVC协议通过USB接口从外接设备接收数据问题