34

私はここで「自己は現在のウィンドウまたはフォームを参照している」と読みました。

この場合、自己は現在のフォームを参照していないようです。

<form><input type="text" onkeyup="alert(self.foo.value)" name="foo"></form>

ただし、この場合は機能します(ウィンドウを参照)。

<form><input type="text" onkeyup="alert(self.document.forms[0].foo.value)" name="foo"></form>

selfでは、いつDOMプロパティを使用するのでしょうwindowか。

4

5 に答える 5

15

self他の回答者は、は を参照するつもりはなく、FORMそれselfはであると指摘していwindowます。彼らは正しいです。self です window。そうでない場合を除いて。IE6 または IE7 (忘れてしまいました) では、起動self.onloadしませんが、起動しますwindow.onload

IE のすべての公式バージョン (および IE9pr3 でさえも) には、==これらのホスト オブジェクトを使用した奇妙な非推移的な実装があります。またはをドキュメント内のノード==と比較するために使用すると、結果は になります。windowselftrue

IEオディティーズ

alert(self == document.body); // 真実
アラート (document.body == 自己); // 間違い
アラート (ウィンドウ == 自己); // 真実
アラート (ウィンドウ === 自己); //間違い
var b = document.createElement("b");
アラート (ウィンドウ == b); // 間違い
アラート (ウィンドウ == document.body.appendChild(b)); // 真実
アラート (ウィンドウ == document.body.removeChild(b)); // 間違い

于 2010-07-10T05:03:25.413 に答える
14

すべてのウィンドウで、オブジェクトのselfおよびwindow プロパティはwindow現在のウィンドウの同義語であり、必要に応じてそれらを使用して現在のウィンドウを参照できます。たとえば、 または のいずれかのメソッドを呼び出して、現在のウィンドウを閉じることができcloseます 。これらのプロパティを使用して、コードを読みやすくしたり、 というフォームからのプロパティ参照を明確にしたりすることができます。windowselfself.statusstatus

于 2010-07-09T20:51:36.513 に答える
11

selfは予約済みのキーワードまたは標準タイプではありませんが、クロージャのオブジェクトへの参照を保持するための事実上の標準名になっています。

ここでは、に渡すクロージャを作成しsetTimeout()ます。そのクロージャが実行されるthisと、グローバルオブジェクトを参照します。fooオブジェクトへの参照doLaterが最初に呼び出されたままにするために、という名前の変数selfが使用されます。'self'には意味のあるセマンティクスがあります。

Foo.prototype.doLater = function() {
  var self = this; // current object

  window.setTimeout(function() { self.doSomething(); }, 1000);
}

new Foo().doLater();
于 2010-07-09T20:55:07.673 に答える
6

self後で参照するためにコンテキストを参照する関数のスコープ内に変数を作成したい場合を除いて、決して、

function Constructor() {
    var self = this;
}

thisではなく、手元の要素を参照するために使用する必要がありますself。ただし、グローバルスコープでthisは、への参照windowであり、selfwindowです。

于 2010-07-09T20:48:51.640 に答える