2012-04-26 5 views
1

コードメンバーメソッドに渡される引数を受け付けません:私は、出力「何」にそれを期待するときこれが「未定義」を出力Javascriptの名前空間/シングルトンを使用すると、恐怖の

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

namespace.saySomething("whatever"); 

。どうして?そして、修正は何ですか?私の目標は、ヘルパー関数を置く名前空間を持つことだけです。

答えて

2

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

あなたのコードは次のようになります。あなたも、名前空間は、いくつかの他のコードで上書きされないことを確認するために、私は次のようなものを使用することになり

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

namespace.saySomething("whatever"); 
+0

誰かが自分のネームスペースを使用する可能性があり、ネームスペースを変更して実行できるので、このメソッドを使用しません。namespace.saySomething = function(someotherthing){console.log(someotherthing);/*とここにいくつかのものがあります* /}。 – vimdude

2

function(something){...}の前にnewを削除してください。現在、saySomethingは匿名コンストラクタのインスタンスです。これはそれを行う必要があります

+0

もちろん、私はそれを逃したとは思わない。あまりにも長い間起きている。超高速な答えをありがとう! –

0

、サンプルhttp://jsfiddle.net/Jssxy/

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

namespace.saySomething("whatever");​ 
3

new function is generally wonky.ロブWの答えは(+ +1)絶対的に正しいですが、私は個人的にも、さらにおよびremove all the newing行くだろう:

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

namespace.saySomething("whatever"); 

の場合異なるインスタンスを作成できるようにしたい場合は、do it the right way

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

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

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

+0

Thanx。うん、あなたは正しい、この特定の状況で私のためのプロトタイプオブジェクトは少し残忍である。そして、私は完全な吹き飛ばされたシングルトンパターンを作成しようとは決して考えなかった。だからこそ、私はトピックの中の言葉を「名前空間/シングルトン」のように組み合わせました。あなたの答えをよろしく! –

1

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

namespace.saySomething("whatever"); 
関連する問題