What does "self" mean in javascript?
I read here that "self Refers to the current window or form".
Self does not seem to refer to the current form in this case:
<form><input type="text" onkeyup="alert(self.foo.value)" name="foo"></form>
However in this case it works (referring to the window):
<form><input type="text" onkeyup="alert(self.document.forms[0].foo.value)" name="foo"></form>
So when would you use the self
DOM property over just 开发者_运维知识库window
?
Other replies have pointed out that self
is not going to refer to the FORM
and that self
is window
. They're right; self
is window
. Well, except when it isn't. In either IE6 or IE7 (forgot), self.onload
would not fire, though window.onload
would.
All official versions of IE (and even IE9pr3) have an odd, intransitive implementation of ==
with these host objects. Using ==
to compare either window
or self
to a node in the document, the result is true
.
IE Oddities
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
For all windows, the
self
andwindow
properties of awindow
object are synonyms for the current window, and you can optionally use them to refer to the current window. For example, you can close the current window by calling theclose
method of eitherwindow
orself
. You can use these properties to make your code more readable or to disambiguate the property referenceself.status
from a form calledstatus
.
self
is not a reserved keyword or standard type, but has become a defacto standard name when for keeping reference to an object for closures.
Here we create a closure to pass to setTimeout()
. When that closure is executed, this
will refer to the global object. To keep a reference to the foo
object doLater
was originally called on, a var named self
is used. It could be anything but 'self' has meaningful semantics.
Foo.prototype.doLater = function() {
var self = this; // current object
window.setTimeout(function() { self.doSomething(); }, 1000);
}
new Foo().doLater();
self refers to the global scope - If the context is a window it will refer to window.self, while in case of a non-windowed context it will refer to the global scope of that context (e.g. in service worker code, self refers to the worker global scope).
self refers to the global scope of a context:
- window context
- worker context (support for multiple workers for the same webapp is being worked on).
https://developer.mozilla.org/en-US/docs/Web/API/Window/self
Never, unless I wanted to create a self
variable in the scope of a function referring to the context for later reference,
function Constructor() {
var self = this;
}
You should use this
to refer to the element at hand, not self
. In global scope though this
is a reference to window
, and self
is also window
.
精彩评论