1

モジュールパターン内からパブリックメソッドを呼び出そうとしています。

モジュールパターンを使用しているのは、コードをより整理するために、さまざまな異なるJSファイルに分割できるためです。

ただし、publicメソッドを呼び出すと、が取得され、未定義のままに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....");

        }
    }   
}
4

2 に答える 2

2

connection: function ()これは、コンストラクター関数であり、更新が必要な含むオブジェクトをエクスポートしているためです。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 に答える