1

恐怖のコード:

var namespace = new function ()
{
    this.saySomething = new function( something )
    {
        console.log( something );
    };
}

namespace.saySomething( "whatever" );

これは、「何でも」を出力すると予想していたときに「未定義」を出力します。どうして?そして、修正は何でしょうか?私の目標は、いくつかのヘルパー関数を配置する名前空間を持つことだけです。

4

5 に答える 5

3

new function一般的に不安定です。Rob Wの答えは絶対に正しいです(+1されます)が、私は個人的にさらに進んですべてのingを削除しますnew

var namespace = 
{
    saySomething: function( something )
    {
        console.log( something );
    }
}

namespace.saySomething( "whatever" );

個別のインスタンスを作成できるようにする場合は、正しい方法で行います

function Namespace() {}
Namespace.prototype.saySomething = function (something)
{
    console.log(something);
}

// Usage:
var foo = new Namespace();
foo.saySomething("Hallllooooo!");

...「シングルトン」と言いましたが、これはあなたの目標には関係ないと思います。

于 2012-04-26T19:51:23.150 に答える
2

new前に削除しfunction(something){...}ます。現在、saySomethingは匿名コンストラクターのインスタンスです。

于 2012-04-26T19:48:34.153 に答える
2

new関数の前に使用する必要はありません。newコンストラクターが既に定義されている場合、オブジェクトのインスタンス化にのみ使用されます。

コードは次のようになります。

var namespace = {
    saySomething: function(something) {
        console.log(something);
    }
}

namespace.saySomething("whatever");
于 2012-04-26T19:52:36.957 に答える
1

名前空間が他のコードによってオーバーライドされないようにする必要があるため、次のようなものを使用します。

var namespace = (function() {
      return {
          saySomething: function(something) {
               console.log(something);
          }
      };
})();

namespace.saySomething("whatever");
于 2012-04-29T21:08:57.213 に答える
0

これでうまくいくはずです、サンプルhttp://jsfiddle.net/Jssxy/

var namespace = {
    saySomething : function(something) {
        console.log(something);
    }
}

namespace.saySomething( "whatever" );​
于 2012-04-26T19:51:14.020 に答える