上下文

作用域和上下文之间关系亲密,但是不要把它们混。作用域与标识符指向什么变量有关,而上下文(或叫做接收器)则是与this关键字有关-----CoffeeScript中可将其简写为@

    setName = (name) -> @name = name

    cat = {}
    cat.setName = setName
    cat.setName 'Mittens'
    console.log cat.name # 'Mittens' setName的函数的@或this 代表的是cat @name 代表的是cat.name

   setName 'ABBCC' #对cat没有影响

   pig = {}

   setName.apply pig, ['Babe']
   console.log pig.name #'Babe'

   setName.call pig, 'Babe'

  call 只能改变一个正常函数调用的上下文,而apply不但能够改变上下文而且还能传递一个任意数量的参数。

  CoffeeScript中上下文的规则做个总结,前面的规则优先于后面的规则:

    1 函数调用之前若有new关键字,则上下文为新建的对象;
    2 使用call或者apply调用函数时,给定的第一个参数即为上下文;
    3 否则,函数作为对象的属性(obj.func)或者obj['func']来调用时,它就把该对象作为上下文来运行;
    4 如果与上述几条都不符,则函数在全局上下文中运行。


  

转载于:https://my.oschina.net/u/581986/blog/185674

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值