2012-04-14 138 views
1

試圖用一個簡單的測試將我的思想圍繞在Javascript中的原型,特別是Node.js。Node.js原型繼承

function Lint() { 
    this.input = 'foo'; 
    events.EventEmitter.call(this); 
} 

Lint.prototype.dirs = function (dirs) { 
    _.each(dirs, this.files); 
} 

Lint.prototype.files = function (dir) { 
    console.log(this.input); // trying to get 'foo', returns undefined 
} 

var lint = new Lint(); 

lint.dirs(['js', 'js/views']); 

Lint.prototype.files日誌不確定,因爲this是不是指皮棉的實例。我在這裏錯過了什麼?

我能想到的唯一的解決辦法,這樣的作品,是經過初始this從周圍向Lint.prototype.dirs彼此的功能。我很確定有更好的方法。

回答

4

this指的是lint對象,但是您沒有將Lint對象傳遞給_.each。你正在從對象中分離函數並傳遞它。

您可以將功能的情況下結合使用Function.prototype.bind所需的值...

_.each(dirs, this.files.bind(this)); 

或者,你可以繼續到this值的參考,並傳遞一個匿名函數來_.each ...

var this_lint = this; 

_.each(dirs, function(v) { 
    this_lint.files(v); 
} 
+1

權,當然:)你爲什麼CW呢? – alex 2012-04-14 13:59:41

+0

@alex:這是我現在的事情。我所有的答案都是CW,所以如果你願意的話可以隨意選擇。 ;-) – 2012-04-14 14:01:45

+0

非常感謝!有趣的是,爲什麼這種變化返回錯誤? 'VAR this_lint =這一點;'' _.each(迪爾斯,this_lint.files);' – 2012-04-14 14:11:13