“自我”在javascript中的含义是什么?

时间:2010-07-09 20:45:49

标签: javascript dom keyword self

我读了here 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 DOM属性而不是window

5 个答案:

答案 0 :(得分:12)

其他回复指出self不会引用FORMselfwindow。他们是对的; self window。好吧,除非它不是。在IE6或IE7中(忘了),虽然self.onloadwindow.onload,但==不会触发。

IE的所有官方版本(甚至IE9pr3)都有==与这些主机对象的奇怪,不及时的实现。使用windowselftrue与文档中的节点进行比较,结果为{{1}}。

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

答案 1 :(得分:10)

self不是保留关键字或标准类型,但在保持对闭包对象的引用时已成为事实上的标准名称。

这里我们创建一个传递给setTimeout()的闭包。执行该闭包时,this将引用全局对象。为了保持对最初调用的foo对象doLater的引用,使用名为self的var。它可能是“自我”具有有意义的语义。

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

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

new Foo().doLater();

答案 2 :(得分:9)

  

对于所有窗口,selfwindow   window对象的属性是   当前窗口的同义词,和   您可以选择使用它们来引用   到当前窗口。例如,   你可以关闭当前窗口   调用其中任何一个的close方法   windowself。你可以使用这些   属性使您的代码更多   可读或消除歧义   属性参考self.status来自a   形式称为status

答案 3 :(得分:6)

从不,除非我想在函数范围内创建一个self变量,引用上下文以供日后参考,

function Constructor() {
    var self = this;
}

您应该使用this来引用手头的元素,而不是self。在全局范围内,this是对window的引用,self也是window

答案 4 :(得分:3)

自我是指全球范围 - 如果上下文是一个窗口,它将引用window.self,而在非窗口上下文的情况下,它将引用该上下文的全局范围(例如,在服务工作者代码中,self指的是工作者全局范围)。 / p>

self指的是上下文的全局范围:

  • 窗口背景
  • 工作人员上下文(正在处理对同一个Web应用程序的多个工作程序的支持)。

https://developer.mozilla.org/en-US/docs/Web/API/Window/self