2011-11-14 13 views
28

ほとんどのサイトでは、Function.argumentsのプロパティとしての「callee」は推奨されていません。しかし、いくつかのサイトでは、さらに進んで、Functions.argumentの全体が廃止されたと言っています。 http://aptana.com/reference/api/Arguments.htmlルーチンが水中で死んでいる場合は、なぜ呼び出される人だけ言及するのですか?私はちょうど「引数」を発見し、それは、例えば非常に便利なようだ:http://hungred.com/how-to/secret-arguments-array-javascript/Javascript:引数の配列は非推奨ですか?

答えて

44

Function.argumentsは非推奨ですが、それは、関数内でのみ利用可能ですバニラargumentsオブジェクトの非推奨です。 (例えば、x = theFunc.arguments[i];の代わりにx = arguments[i];を使用)

受信した序数引数にアクセスするための好ましい方法です。

+0

ああ、それはそれを説明します!どうもありがとう。 –

+0

これは意味があります。 Javascriptでマルチスレッド対応が必要な場合、そのようなグローバルなステートフルなオブジェクトは殺してしまいます。 –

+0

'Function.arguments'はなぜ廃止されましたか?ネストした関数の中の親関数の引数に直接アクセスすることができます。これは 'arguments'オブジェクトではできないものです。 – Taurus

1

calleeは廃止されましたが、引数は多くのアプリケーションで使用されています。引数が非難されるかどうかは分かりません。関数(params)内に定義されていない場合でも、関数のすべてのパラメータを取得するために使用することができます。

ほとんどの場合、私はjQueryプラグインを開発するときに使用しました。ような何か:

$.fn.tooltip = function(method) { 
    if (methods[method]) { 
     return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
    } else if (typeof method === 'object' || ! method) { 
     return methods.init.apply(this, arguments); 
    } else { 
     $.error('Method ' + method + ' does not exist on jQuery.tooltip'); 
    }  
    }; 

あなたが唯一の方法は、パラメータとして渡されますが、最初の内の引数は最初の値の後に分割されているかどうかを確認することができたよう。この方法で、関数名とこの関数で使用されるすべてのパラメーターを渡すことができます。

全例:http://docs.jquery.com/Plugins/Authoring

1

ありませんが、arguments配列が仕様の最新バージョン5.1で非推奨されていません(60ページを参照してください)。ただし、callerオブジェクトは、コードがstrictモードでない場合にのみ使用できます。

関連する問題