3

新しいオブジェクト インスタンスを取得する名前空間内に関数を作成しようとしています。

次のことをしようとすると、構文エラーが発生します。

var namespace = {
    a : function(param){
        this.something = param;
    },
    a.prototype.hi = function(){
        alert('hi');
    },

    b : function(){
        var t = new a('something');
    }
};

これを行うための正しい構文は何ですか? namespaceオブジェクト内で行うことはできませんか? 最初に名前空間を宣言したくありません。ありがとう

4

3 に答える 3

7

最初に名前空間を宣言したくありません。

あなたはこのような奇妙なことをすることができます:

var namespace = {
    init: function() { 
        a.prototype.whatever = function(){};
    },
    a: function(x) {
        this.x = x;
    }  
}
namespace.init();
var myA = new namespace.a("x");

しかし、すべてをカプセル化したい場合は、モジュールパターンを試してみませんか?それはずっときれいです:

var namespace = (function() {
     function a() {};
     function b(name) {
          this.name = name;
     };
     b.prototype.hi = function() {
          console.log("my name is " + this.name);
     }
     return {
          a: a,
          b: b
     }
})();
于 2012-12-03T16:17:52.853 に答える
0

あなたが何を望んでいるのか正確にはわかりませんが、これは機能します:

var namespace = {

    a: function() {

        function a() {

        }

        a.prototype.hi = function() {
            console.log("hi");
        }

        return new a;

    }

}

var obj = new namespace.a();
obj.hi()

// -> 'hi'
于 2012-12-03T16:19:55.587 に答える
0

JavaScript 名前空間はオブジェクトであるため、key: valueカップルのみを使用できますが、コードは使用できません (: の場合と同様a.prototype.hi = function() {...})。

したがって、それを : 宣言とコード : の 2 つに分ける必要があります。

var namespace = {
    a : function(param){
        this.something = param;
    },
    b : function(){
        var t = new a('something');
    }
};

namespace.a.prototype.hi : function() { ... }
于 2012-12-03T16:13:30.817 に答える