2011-01-09 27 views
2

Javascriptでオブジェクトを作成しようとしています(Appcelerator/Titaniumの場合)。 「オブジェクト」は、このように定義されています。同じファイルで式 'xxxx'の結果がJSのコンストラクタではありません

function server() { 
    this.cacheimages = 0; 
    this.login = ""; 
    this.name = ""; 
    this.root = ""; 
    this.signup = ""; 
    this.useimages = 0; 
    this.userexists = ""; 
    this.isdefault = 0; 

    return this; 
} 

、別の関数の中で、私はこの行を実行すると:var server = new server();は、私は私がして、「リターン」せずにそれを試してみましたResult of expression 'server' is not a constructor.
エラーが出ますライン、どちらも動作しません。私は間違って何をしていますか?

+1

もう一度 'var server = new server();'を実行しますか?もしそうなら、それはあなたの問題です。なぜならあなたは 'server'を' server'に置き換えたからです。変数や関数(関数サーバなど)の名前を変更して衝突しないようにしてください。 _Manyは、コンストラクタ関数の先頭に大文字を付けて命名された規約を使用します。_ – Phrogz

+0

戻り値を取り出し、別の変数名を使用してみてください。すなわち、var myserver = new server(); –

+0

+1にPhrogzの提案:*大文字の大文字でコンストラクタ関数の名前が付けられているという規約を使用してください。通話者が「新規」を忘れると、彼らは壊れてしまいます。代わりに普通の関数を書く。 –

答えて

3

変数の名前を変更するとどうなりますか? (:JavaScriptですべてのものがオブジェクトであるように、オブジェクトまたはより良いまだ)

var server2 = new server(); 
+0

+1ポイントは 'function server()'が変数 'server'を作成し、それが上書きされている点です。 – lonesomeday

+1

はい、ところで、「これを返す」必要はありません。 –

2

機能は、彼らが変数である意味、JavaScriptでは「first class citizens」です。あなたがserverと呼ばれる新しい変数を宣言するのであれば、あなたのコンストラクタ関数にも、今すぐ

var server = function() { 
//[...] 
} 

のように書くことができ、これはあまりにも可変で、コンストラクタ関数を上書きします。

コンストラクタ関数の名前をアップカウントするのが一般的です。 function Server() { ... }var server = new Server(途中でかっこは必要ありません)を使用すると問題ありません。

関連する問題