Javascript node.js instanceof和cleartextStream

Javascript node.js instanceof和cleartextStream,javascript,node.js,Javascript,Node.js,我试图验证我的原型的两个参数是否是我期望的实例。我需要知道cleartextStream是否是node.js文档调用的实例,manager是否是我在另一个文件中定义的原型的实例 var tls = require('tls'), clientManager = require('./client_manager'); var Client = function (cleartextStream, manager) { /* * Both arguments must

我试图验证我的原型的两个参数是否是我期望的实例。我需要知道cleartextStream是否是node.js文档调用的实例,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.constructor))

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

tls没有导出这些类供您检查,因此我看不到一种真正干净的方法

您可以做的一件事是检查对象的原型是否符合您的预期

target_proto = new tls.createSecurePair().cleartext.__proto__
if (target_proto !== clearTextStream.proto)
  throw(....)
需要注意的一点是,只有当您和此对象的创建者引用相同版本的模块(例如,使用相同路径导入等)时,此操作才会起作用,以便将proto对象作为相等对象进行比较

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