this 的绑定

this 是运行期间进行的绑定和它在哪里申明没有关系

 

隐示绑定

 比如通过对象调用,就会隐式绑定到对象上

默认绑定

比如在全局作用域上调用函数,就会默认绑定到全局

显示绑定

通过call 、apply、bind 可以显示改变this的绑定

构造函数绑定

new 运算符会生成一个新对象

通过Protype属性进行原型链接

将新对象绑定到函数调用的this 上

如果没有返回其它对象,则自动返回一个新对象

 

绑定的优先级 : new >显示>隐式>默认

 

call 、apply 、bind 的区别:

call : object.call( object, 'argument' ,'argument' );第二个参数是字符串

apply:object.apply(object, [ 'argument' , 'argument' ]); 第二个参数是数组

bind:object.bind( object, 'argument', ' argument ' )();  bind 是返回的一个函数,只有调用这个函数后才算执行

 

特殊情况的 把 null  或者 undefined 作为this的绑定对象传入,这样的实际情况是采用默认的绑定规则。

用途就是 用于展开数组

function(a,b){

console.log(a,b)

}

print.apply(null, [1,2] );

还要就是使用bind 用于: 柯里化

var foo = print.bind(null ,1)

foo(2); 

 

箭头函数:

ES6 箭头函数不能绑定 this 关键字,所以它将在词法上向上查找,然后使用定义它所在的作用域。

普通函数中的this表示调用此函数时的对象。而箭头函数是没有自己的this的,箭头函数里面的this会继承自外部的this。或者用代码块的概念解释会更加直观:箭头函数中的this就是外层代码块的this。

 

箭头函数体内的this对象,就是定义该函数时所在的作用域指向的对象,而不是使用时所在的作用域指向的对象。

 

var x = 11;
var obj = {
    x: 22,
    methods: {
        x: 33,
        say: function() {
            console.log(this.x)
        },
        say2: () => {
            console.log(this.x)
        }
    }
}
obj.methods.say();//33 普通函数this表示调用次函数时的对象即methods对象
obj.methods.say2();//11 say2中this所在的外层代码块(向外数一个花括号)是methods对象 但并不是说this就是该对象,而是指methods对象中的this 此时this是window

箭头函数使用注意点:

  1. 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
  2. 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
  3. 不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值