再也不用被this苦恼了

 前端编程对于this再熟悉不过了,今日来个老调重弹温故知新,肯定有很多大佬已经完全吃透了this原理,敬请出门左拐。对于理解this似懂非懂的同学可以借鉴一波

1.this描述

this指的是当前执行环境上下文,只要牢牢抓住这一点就能找到this的根源,this.function、this.property就能准确定位实际对象。

2.this绑定规则

window 绑定

复制代码
function sayAge () {     console.log(this.age); } var  user = {     name: 'ccy',     age: 18 } sayAge()
复制代码

  输出结果为undefined,仔细思考当前函数执行的上下文,其实等价于window.sayAge()

  this默认绑定在window全局对象上

隐式绑定

复制代码
function foo() {      console.log( this.a ); } var obj = {      a: 2,     foo: foo }; obj.foo();
复制代码

  这段代码this绑定到了obj对象,当函数引用有上下文对象(context)时,隐式绑定规则会把this绑定到这个上下文对象

  再看看隐式丢失问题

复制代码
var bar=obj.foo; bar();
复制代码

  输出undefined,因为此时执行上下文为全局对象,没有a属性

显式绑定

  在分析隐式绑定时,必须将函数作为对象的属性,从而将此对象绑定在函数的执行上下文,但想想是不是很麻烦,显示绑定可解决此问题。

复制代码
function foo() {    console.log( this.a );
}
var obj = {   a:2 }; foo.call( obj );
复制代码

  用函数原型属性 call、apply、bind都可以实现

复制代码
Function.prototype.call=function(ctx,arg1,arg2,/*...*/

                    
                
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信