2010-12-28 16 views
1

どういうわけか、関数をグローバル変数として定義し、内部変数にアクセスできると思っていました。 例:JavaScriptでグローバル関数変数にアクセスする

var func = function(){ 
    var connected = true; 
} 

console.log(func.connected); 

ただし、これはまだ "未定義"となります。 私はこのような特定の変数を「名前空間」するのは面白いと思っていました。

deleteこれらの要素を使用できるため、オブジェクト/リスト/ディクショナリ(それらを呼び出す方法)は使用しません。

+1

?他のものも削除することができます。 – SLaks

+0

'私はそれらの要素を削除することができるのでオブジェクトを使いたくありません。あなたを失望させますが、関数もオブジェクトです:' delete func'。実際、javascriptのすべてがオブジェクトです。 – slebetman

+0

はい、しかし 'var 'を使って宣言された変数を削除することはできません – skerit

答えて

2

これはできません。
実際、それは理にかなっていません。
関数を呼び出すたびに、別々のローカル変数が生成されます。

deleteでもオブジェクトを使用して名前空間を作成する必要があります。

あなたがしたい場合は、また、クラスを作ることができます:あなたはクラスのインスタンスを行う必要があり
注:

function MyClass() { 
    this.connected = true; 
} 

var myInstance = new MyClass(); 
console.log(myInstance.connected); 

しかし、あなたはシングルトンの名前空間を作成するためのクラスを使用するべきではありませんが;意味はありません。

代わりに、あなたはそれがプライベートでvarを使用して

var myNamespace = { connected: true }; 

console.log(myNamespace.connected); 
1

を記述する必要があります。

はこのようにそれを使用する:

var func = function(){ 
    this.connected = true; 
} 
var namespace = new func(); 

console.log(namespace.connected); 

はそれをインスタンス化する必要があることを覚えておいてください。

+1

あなたの権利は、インスタンス化が必要であることを忘れています... –

2

var内の機能をプライベートにします。それを公開するにはthis.connected = trueを使用してください。

var func = function(){ 
    this.connected = true; 
} 

PSは - 彼らは私はあなたが簡単に指定することができるとは思わないこれ、非可算でない限り私の知る限りでは、オブジェクトのすべてのプロパティは削除可能です。削除可能な場合でもthis.connectedを使用する必要があります。

パブリック/プライベートメソッドと "特権"メソッドには、良い読み取りhereがあります。

編集:私はあなたがインスタンス化について知っていると仮定しました。とにかくx = new funcを作成してからx.connectedを作成します。

+0

これは動作しません。 – SLaks

+0

@SLaks - 何がうまくいかないのですか?私はすでに 'delete'演算子について指定しました。そして彼は '新しい'を使用して暗示されます。 –

+1

あなたはなぜ「新」が暗示されていると思いますか? – SLaks

0

あなたはこのようにJSON表記を使用することができます:あなたは `それらをDELETE`することができますので、どのような場合

var func = { 
    connected:true, 
    func:function(){ 
    func.connected = true; 
    } 
} 
console.log(func.connected); 
+0

@スラクス:どうしてですか? – Luis

+0

2番目のバージョンは動作しますが、 'func'が多すぎます。別の名前が必要です。 – SLaks

+0

機能が多すぎるとはどういう意味ですか?なぜあなたは別の名前が必要ですか?何のために? JSONは、変数と関数のシングルトンと名前空間を作成する理由の完全なものです。 – Luis

0
var MyClass = function() { 
    function clazz() { 
     this.message = "Hello"; //instance variable 
    } 

    clazz.connected = true; //static variable 

    return clazz; 
}(); 


alert(MyClass.connected) 
alert(new MyClass().message) 
+0

なぜ正しく動作しませんか?その場合は失敗するでしょうか? –

+0

申し訳ありません。私は誤解しました。 – SLaks

関連する問題