2012-01-12 12 views
-1

匿名オブジェクトという用語は混乱しやすい用語であるため、明確にすることができます。匿名オブジェクトとは、anon関数を定義するのと同じ方法でオブジェクトの宣言を意味します。匿名オブジェクトでメソッドを宣言することは不可能ですか?

例:

someFunction=function(){} 
someObject={} 

が、それらはどこでも、そのようなオブジェクトまたは関数の変数を配置することができるように、より具体的には匿名を配置することができます。たとえば、Object.createというベストな(そして直接的に関連する)例は、window.setTimeout(function(){},ms)(それ自身の関数のクエリを除いて)を使用するのと同じように、変数の代わりに関数を置くだけですが、これを行うことができます:object.Create(some__proto__object,{cake:false})私が方法を含めることを試みるまでdandy。その後、それはスローされますTypeError:ディスクリプタはオブジェクトでなければなりません。だから、

私は

variable={ 
    cake:"cheesecake", 
    taste:"celicious", 
    stateTheCatch:function(){console.log('The cake is a pie!')} 
} 

それは動作しますが、

//In practical use: 
//Object.create(inheritanceObject, 
{ 
    cake:"cheesecake", 
    taste:"celicious", 
    stateTheCatch:function(){console.log('The cake is a pie!')} 
}//); 

が壊れている、私は良い{}すべて、[OK]を{cake:"cheesecake",taste:"delicious"}に入れ、コンソールでいくつかのテストを行うには、対象としてカウントされません。なぜこれは悪いのですか?識別子を使用する以外に、Object.createの2番目の引数にそのように入力するためです。だから、それがなぜそんなにうまくいかないのか手がかり?

+0

FYI:ECMAScript v3 specはjavascriptがどこから来るのかはここにあります。http://www.ecma-international.org/publications/standards/Ecma-262-arch.htm、 '3rd Edition'をクリックしてください。 –

答えて

3

これは、オブジェクトをまったく作成していないためです。ステートメントとして使用する場合、角括弧はオブジェクトリテラルではなくコードブロックを作成します。

どのようなコードでもかっこを付けることはできますが、あまり効果はありません。 (変数は、関数スコープを持っているので、それがないにもスコープ変数を行います。)

{ 
    { 
    var x = 41; 
    { 
     { 
     x++; 
     } 
    } 
    } 
    alert (x); 
} 

あなたが値としてオブジェクトを使用している場合は、それが動作:

JavaScript関数で
function x(y) { y.tateTheCatch(); } 

x({ 
    cake:"cheesecake", 
    taste:"celicious", 
    tateTheCatch:function(){console.log('The cake is a pie!')} 
}); 

はオブジェクトですので、あなた別の値を使用する場所であれば関数値を使用できます。これはパラメータとして送信することができ、変数、オブジェクトプロパティ、および配列に格納することができます。

+0

うわー、ありがとう。また、あなたはちょうど私の誤植のすべてを大事にコピーしました。 – TERMtm

+0

また、{...}を囲んでいるように見える括弧は完全に固定されています。アイデアをありがとう、ありがとう。 – TERMtm

+2

@TERMtm:それほど大事なことではない...タイプミスや人の母国語以外のことを知るのは難しいので、コードをほとんど変えないでおくと、混乱が最小限に抑えられます。 :) – Guffa

関連する問題