このパターンがよく見られます
(function(){}).call(this)
これも同じですか?
(function(that){})(this)
前もって感謝します
編集
これらの2つのコードは同じ問題を解決しようとしていますか?これの文脈?
編集
誰かがタイトルを編集して、より良いものを提供できますか?それは面白いと思います。
このパターンがよく見られます
(function(){}).call(this)
これも同じですか?
(function(that){})(this)
前もって感謝します
編集
これらの2つのコードは同じ問題を解決しようとしていますか?これの文脈?
編集
誰かがタイトルを編集して、より良いものを提供できますか?それは面白いと思います。
いいえ、そうではありません。もう1つは関数にオブジェクトコンテキストを与え、もう1つはオブジェクトコンテキストなしで引数を渡します。
次のようなジェネリック関数を想像してみてくださいArray#shift()
。
var shift = Array.prototype.shift;
//Shift expects an object context, and cannot be called without one.
//so this won't work:
shift($("div"))
//undefined
//This does:
shift.call($("div"))
//<div id="notify-container"></div>
これらの2つのコードは同じ問題を解決しようとしていますか?これの文脈?
はい、しかし別の方法で。
最初のバージョンは、これを最初の引数として呼び出し、呼び出された関数コンテキスト内の変数が参照するコンテキストFunction.prototype.call
オブジェクトを受け入れます。this
2番目のバージョンは、無名関数を自己呼び出しし、this
(呼び出しコンテキストで)参照するオブジェクトを無名関数に渡します。これで、呼び出された無名関数コンテキスト内で、を介してアクセスできますthat
。またはthis
になります(ES5ストリクトモードによって異なります)global
undefined
質問の後に編集:
いいえ。Function.prototype.callthis
は最初の引数として受け入れます。this
この場合、実際の引数として関数に渡されることはありません。ただし、 2番目の関数のように、実際に渡さthis
れたものに対処できます。that
編集:ここに例があります。
MyObject = {};
MyObject.prototype.myMethod = function(value) { console.log("Hello, " + value); }
var obj = new MyObject();
function myMethodCaller(value)
{
this.myMethod(value);
}
myMethodCaller("World!");
myMethodCaller.call(obj, "World!");
this
(レシーバー)はほとんどの場合(より一般的には、コンテキスト内にあるものは何でも、グローバルオブジェクトです。ワーカーなどとは異なります)、メソッドwindow
を持たないため、最初の呼び出しはエラーで失敗します。myMethod
this
がを指しているので、コンソールに入力します。obj
この上でmyMethod
メソッドが呼び出されます。