【问题标题】:user module - node js用户模块 - 节点 js
【发布时间】:2011-12-13 21:19:19
【问题描述】:

我有一个关于在模块中定义对象的问题。

假设我有一个模块:

/*---obj----*/
function A (param){
this.parm=param;
function func(){
//do somthing
 }
}
exports.func=func;

/*---file.js----*/
obj=require('obj');

function fileFunc(A){
A.func();//with out this line it works fine
A.param=2;
 }
}

由于某种原因,它无法识别对象 A 中的函数。它可以识别对象 A 及其不同的变量,但在执行该函数时,它会给出消息:
TypeError: Object # has no method 'func'

我还尝试通过以下方式导出 A 中的函数: export.A.func=A.func

或 出口.func=func 两者都不起作用..

有人知道吗?

谢谢 马蒂

【问题讨论】:

    标签: object node.js module


    【解决方案1】:

    您在 A 内部定义的函数仅对该函数是本地的。你想要的是

    function A(param) {
      this.param = param;
    }
    
    A.func = function() {
      // do something
    };
    

    但如果你将 A 视为构造函数,那么你需要将该函数放入 A 的原型中

    A.prototype.func = function() {
      // do something
    };
    

    【讨论】:

    • 感谢分配成功!但还有一个问题。对象 A 也得到一个套接字对象,换句话说,可以说参数是一个套接字(使用网络模块)。在函数 func 我想写入套接字。所以我写了 A.prototype.func = function() { A.write('str'); };它不承认这是一个套接字。它说函数 write 是未知的。我如何告诉编译器 param 是 socket 类型的对象?
    • 当您在 Javascript 中实例化一个对象时,您可以使用 this 变量访问它的属性。你想做的是this.param.write('str');。我可能是学习如何在 Javascript 中使用对象的好资源:developer.mozilla.org/en/…
    • 我很抱歉没有写它,但这就是我写的。我写了 this.param.write('str') 并且错误说“无法调用 undefiend 的方法'write'”
    • 那么我猜你没有实例化对象A,你需要使用我在回答中使用的第一个示例。 A.func = function() {}; 而不是在原型中添加 func
    猜你喜欢
    • 2015-03-24
    • 2018-09-03
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多