在模块javascript中调用公共方法

时间:2013-03-26 17:17:43

标签: javascript node.js

我正在尝试从模块模式中调用公共方法。

我正在使用模块模式,因为它允许拆分成各种不同的JS文件,以使代码更有条理。

但是,当我调用公共方法时,我得到TypeError并且typeof仍未定义。

请帮忙!!提前谢谢。

main.js

function MainObject() {
    this.notify = function(msg) { console.log(msg); }
}

var connObj = require("./myextobj");

var mainObj = new MainObject();

connObj.connection.handle = mainObj;

console.log(typeof connObj.connection.connect); // undefined

connObj.connection.connect(); // TypeError: Object has no method 'connect'

myextobj.js

module.exports = {

    connection: function () {

        this.handle = eventhandle;

        this.connect = function() {

            // connect to server
            handle.notify("completed connection....");

        }
    }   
}

2 个答案:

答案 0 :(得分:2)

这是因为您导出的对象包含connection: function (),这是一个构造函数,需要 newing-up 。然后,您可以访问附加到该特定实例的this属性:

var connection = require("./myextobj").connection; // reference the constructor function

var conn = new connection(); // new-up connection

console.log(typeof conn.connect); // -> function

修改

如果myextobj.js导出的唯一内容是构造函数,则无需将其包装在文字对象中。即你可以这样做:

module.exports = function Connection() {    
    this.handle = eventhandle;
    this.connect = function() {
        handle.notify("completed connection....");
    }
} 

然后像这样使用:

var Connection = require("./myextobj");

注意:.connection不再附加到末尾以引用该函数。

答案 1 :(得分:-2)

给这一点。

 var module = {};
module.exports = {

    connection: function () {

        return {
            handle: eventhandle,

            connect: function () {

                // connect to server
                handle.notify("completed connection....");

            }
        }
    }()
}

module.exports.connection.connect()