1

我试图从模块模式中调用一个公共方法。

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

但是,当我调用公共方法时,我得到 aTypeError并且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'

我的extobj.js

module.exports = {

    connection: function () {

        this.handle = eventhandle;

        this.connect = function() {

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

        }
    }   
}
4

2 回答 2

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不再附加到末尾以引用该函数。

于 2013-03-26T17:24:57.717 回答
-2

试一试。

 var module = {};
module.exports = {

    connection: function () {

        return {
            handle: eventhandle,

            connect: function () {

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

            }
        }
    }()
}

module.exports.connection.connect()
于 2013-03-31T13:38:29.277 回答