2011-06-22 80 views

回答

2

在这个例子中,fn是传递到auth()作为参数的函数,所以是的,你提供auth()有一点你自己选择的功能。这被称为“高阶函数”,参见here作简短介绍。这是一种主要与functional programming相关的技术,并且由于Javascript的对象方向通常被认为有点弱,所以它是Javascript中更倾向于使用的更高级的程序(Javascript有时被称为“Scheme in Java's clothing”)

在此确切的代码:它的测试套件的一部分,所以它配置io总是失败的授权,才能看到一个授权失败的正常处理(线408-409暂时):

res.statusCode.should.eql(403); 
data.should.match(/handshake unauthorized/); 

这两根线应在没有例外的情况下到达并且测试检查结果包含有意义的值。

+0

我会说JS对象定位非常强大,它只是不同而已。 –

+0

我认为它也可以,但不易访问(如果你想要传统继承,你必须自己提供它),因此更常用的功能性习语。 –

0

fn是作为参数传递给auth的函数。

auth功能is called here

Manager.prototype.authorize = function (data, fn) { 
    if (this.get('authorization')) { 
    var self = this; 

    this.get('authorization').call(this, data, function (err, authorized) { 
     self.log.debug('client ' + authorized ? 'authorized' : 'unauthorized'); 
     fn(err, authorized); 
    }); 
    } else { 
    this.log.debug('client authorized'); 
    fn(null, true); 
    } 

    return this; 
}; 

所以你看回调函数接受两个参数,errauthorized。在测试中,这些参数设置为nullfalse

很可能在某些时候您可以指定fn应该是什么,但这不一定非要!也可能是图书馆始终提供此功能,并且您在设置auth函数时调用该函数是您的工作。

相关问题