1

call method引数を渡すために ([mdn ドキュメント] で説明されているように) の javascriptを使用することは可能thisですか?

たとえば、次のコードがあります。

console.log(this);
$('#image_id').load(function () {
    console.log(this);
});

2 番目this( に含まれるものload function) が最初のものと同じものを参照するようにします。

私は試してみました

console.log(this);
$('#image_id').load.call(this, function () {
    console.log(this);
});

しかし、うまくいきません。

提案をお寄せいただきありがとうございます。

4

4 に答える 4

5

必要ありませんcall(またはapply)

代わりにこれを行う必要があります。

var that = this;
console.log(this);
$('#image_id').load( function () { 
    console.log(that); 
});

Javascript にはレキシカル スコープがあります。これは、変数thatがコールバックで使用可能であり、定義されている場所の値を持つことを意味します。この場合、は外側のスコープにthatあると定義されています。this

于 2012-01-18T14:23:37.890 に答える
3

コールバックを呼び出していないため、そうではありません。内部で呼び出されています。

でも使え.bindます。

console.log(this);
$('#image_id').load( function () {
    console.log(this);
}.bind(this));

ただし、古いブラウザでは利用できません。(これはネイティブ.bind()であり、jQuery のものではありません。)


jQueryには$.proxy...と呼ばれるものがあります

console.log(this);
$('#image_id').load($.proxy(function () {
    console.log(this);
},this));

...ここで、最初の引数は関数で、2 番目の引数はthisコールバックで使用する値です。

于 2012-01-18T14:24:37.660 に答える
2

はい、.calljQueryは何でも機能できますが、それはその機能にのみ影響します。this渡す関数は、 jQuery によって制御される別個のコールバック関数です。

$.proxyコールバックのコンテキストを強制するために使用できます。

$('#image_id').bind( "load", $.proxy( console.log, console, this ) );

ロギング以上のことをしたい場合は、さらに醜くなります。

$('#image_id').bind( "load", $.proxy( function(){
     console.log( this );
     alert( this );
}, this ) );
于 2012-01-18T14:26:04.377 に答える
1
var self = this;
$('#image_id').load(function(){
    (function(){
        console.log(this);
    }).call(self);
});
于 2012-01-18T14:27:11.413 に答える