1

我正在尝试验证我的原型的两个参数是否是我期望它们的实例。我需要知道 cleartextStream 是否是 node.js 文档调用tls.cleartextStream的实例,以及 manager 是否是我在另一个文件中定义的原型的实例。

var tls = require('tls'),
    clientManager = require('./client_manager');

var Client = function (cleartextStream, manager) {
    /*
     * Both arguments must be proper instances of the expected classes.
     */
    if (!(cleartextStream instanceof tls.cleartextStream) || !(manager instanceof clientManager))
        throw (...)

直到现在一切都“好”。执行该位时,我得到:

if (!(cleartextStream instanceof tls.cleartextStream) || !(manager instanceof
TypeError: Expecting a function in instanceof check, but got #<CleartextStream>

并且,对于经理部分:

if (!(cleartextStream instanceof tls) || !(manager instanceof clientManager))
TypeError: Expecting a function in instanceof check, but got [object Object]

那么,我将如何检查这些实例呢?

编辑:阅读这篇文章后,我发现对象实际上是构造函数的实例,因此将我的代码修改为

if (!(cleartextStream instanceof tls) || !(manager instanceof clientManager.constructor))

实际上解决了第二个问题。尽管如此,第一个仍然存在。

4

1 回答 1

0

tls 不会导出这些类供您检查,所以我看不到一种真正干净的方法。

您可以做的一件事是检查对象的原型是否是您所期望的。

target_proto = new tls.createSecurePair().cleartext.__proto__
if (target_proto !== clearTextStream.proto)
  throw(....)

需要注意的一件事是,这仅在您和该对象的创建者引用相同版本的模块(例如,使用相同的路径导入等)时才有效,因此proto对象将比较为相等.

于 2012-08-19T06:22:12.520 回答