ここ 「selfは現在のウィンドウまたはフォームを参照しています」と読みました。
この場合、自己は現在のフォームを参照していないようです。
<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
だけでwindow
DOMプロパティを使用するのはいつですか?
すべてのウィンドウで、
self
オブジェクトのwindow
プロパティとwindow
プロパティは現在のウィンドウの同義語であり、オプションでそれらを使用して現在のウィンドウを参照できます。たとえば、close
またはwindow
のいずれかのself
メソッドを呼び出すことにより、現在のウィンドウを閉じることができます。これらのプロパティを使用して、コードを読みやすくしたり、プロパティ参照を明確にしたりできますself.status
status
というフォームから。
他の回答では、self
はFORM
を参照せず、self
はwindow
であると指摘しています。彼らは正しいです。 self
iswindow
。そうでない場合を除いて、まあ。 IE6またはIE7(忘れた)のどちらでも、self.onload
は起動しますが、window.onload
は起動しません。
IE(およびIE9pr3)のすべての公式バージョンには、これらのホストオブジェクトを使用した==
の奇妙な自動詞実装があります。==
を使用してwindow
またはself
をドキュメント内のノードの場合、結果はtrue
です。
IEの奇数
alert(self == document.body); // true alert(document.body == self); // false alert(window == self); // true alert(window === self); // false var b = document.createElement( "b"); alert(window == b); // false alert(window == document.body.appendChild(b)); // true alert(window == document.body.removeChild(b)); // false
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();
後で参照できるようにコンテキストを参照する関数のスコープにself
変数を作成したい場合を除いて、決して。
function Constructor() {
var self = this;
}
this
ではなく、self
を使用して手元の要素を参照する必要があります。グローバルスコープでは、this
はwindow
への参照であり、self
もwindow
です。
selfはグローバルスコープを参照します-コンテキストがウィンドウの場合はwindow.selfを参照しますが、ウィンドウ化されていないコンテキストの場合は、そのコンテキストのグローバルスコープを参照します(たとえば、Service Workerコードでは、selfはワーカーのグローバルスコープを参照します)。
自己とは、コンテキストのグローバルスコープを指します。
https://developer.mozilla.org/en-US/docs/Web/API/Window/self