上下文

作用域和上下文之间关系亲密,但是不要把它们混。作用域与标识符指向什么变量有关,而上下文(或叫做接收器)则是与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 如果与上述几条都不符,则函数在全局上下文中运行。


  

你可能感兴趣的:(上下文)