1

私が直面している問題を説明する方法がわかりません。小さなスニペットを作成しました。以下を確認してください。

var Package = {};

Object.defineProperty(Object.prototype, 'inherit',
    {
        value: function(Parent, args)
        {
            var temp = function(){};
            temp.prototype = Parent.prototype;
            this.prototype = new temp();
            this.uber = Parent.prototype;
            this.prototype.constructor = this;
        },
        enumerable: false
    });

var Module1 = Package.Module1 = function() {
  // code;
};
Module1.prototype.method1 = function() {
};


var Module2 = Package.Module2 = function() {
  // code;
};
Module2.prototype.method2 = function() {
};


var Module3 = Package.Module3 = function() {
  // code;
};
// using custom : object.prototype.inherit
// Module3 inherit Module1 and 2;
Module3.inherit(Module1);
Module3.inherit(Module2);
Module3.prototype.method3 = function() {
};

//creating object 
var mod = new Package.Module3();
mod.method1();
mod.method2();
mod.method3();

modオブジェクトの作成method1、2、および3にアクセスできますが、実際には、Package.Module3.method1()のように、オブジェクトを作成せずにメソッドを呼び出したいと思います。どうしてそれは可能ですか?

4

2 に答える 2

5

オブジェクトリテラル表記?

var Package = {
    ModuleA : {
        methodA : function(){},
        methodB : function(){}
    },
    ModuleB : {
        methodC : function(){},
        methodD : function(){}
    }
}

Package.ModuleA.methodA();
于 2012-06-19T16:48:25.933 に答える
1

次のようなものを試してください。

var Module3 = Package.Module3 = (function() {       
   var Module3 = function(){
       // using custom : object.prototype.inherit
       // Module3 inherit Module1 and 2;
   };
   Module3.inherit(Module1);
   Module3.inherit(Module2);
   Module3.prototype.method3 = function() {
   };
   return new Module3();
})();

この場合、Module3クラスのインスタンスは1つだけです。

使用法

Package.Module3.method1();
Package.Module3.method2();
Package.Module3.method3();
于 2012-06-19T16:50:29.583 に答える