CoffeeScript代碼中,變量,甚至函數前面有時會帶上一個@符號,那麼翻譯到 javascript裏,就是 「this.」javascript
這就涉及到運行過程當中的上下文。java
這個this指什麼,網上有專門的文章介紹。按我目前的理解,並不徹底等同於面嚮對象語言裏的this,是要區分狀況:ruby
一、若是它位於普通函數內部,那麼這個this是指這個函數,或代表它的做用域,僅限於這個函數內部函數
二、若是所在函數屬於 prototype,那麼這個this就與運行中的上下文有關。this
如下代碼,能夠仔細參詳、比較一下:spa
CoffeeScript:prototype
class User name:'unknown' constructor : (name) -> @name = name sayHello : -> "您好!\r\n普通函數:#{_getName()}!\r\nprototype函數:#{@getName()}!" _getName = -> @name + '先生' getName : -> @name + '先生' user = new User('leftfist') alert user.sayHello()
var User, user; User = (function() { var _getName; User.prototype.name = 'unknown'; function User(name) { this.name = name; } User.prototype.sayHello = function() { return "您好!\r\n普通函數:" + (_getName()) + "!\r\nprototype函數:" + (this.getName()) + "!"; }; _getName = function() { return this.name + '先生'; }; User.prototype.getName = function() { return this.name + '先生'; }; return User; })(); user = new User('leftfist'); alert(user.sayHello());
運行結果就是翻譯
您好!code
普通函數:先生!對象
prototype函數:leftfist 先生!