2012-04-14 119 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