JavaScript和JavaScript之间的区别

大家都知道this在JavaScript中,但也有self在野外遇到的情况下,如在这里

那么, this和JavaScript的self什么区别呢?

除非在别处设置,否则self的值是window因为JavaScript允许您访问window任何属性x ,而不是window.x 。 所以, self真的是window.self self ,与this不同。

 window.self === window; // true 

如果您使用的是在全局范围内执行的函数,则将其设置为window ,因此

 function foo() { console.log( window.self === window, // is self window? window.self === this, // is self this? this === window // is this window? ); } foo(); // true true true 

如果你在一个不同的上下文中使用一个函数, this将会引用这个上下文,但是self仍然是window

 // invoke foo with context {} foo.call({}); // true false false 

你可以在这里find在Window对象 W3C 2006工作草案中定义的window.self

虽然我在这里已经很晚了,但是我遇到了一个可以帮助我们进一步理解的this

 var myObject = { foo: "bar", func: function() { var self = this; console.log("outer func: this.foo = " + this.foo); console.log("outer func: self.foo = " + self.foo); (function() { console.log("inner func: this.foo = " + this.foo); console.log("inner func: self.foo = " + self.foo); }()); } }; myObject.func(); 

O / P

 outer func: this.foo = bar outer func: self.foo = bar inner func: this.foo = undefined inner func: self.foo = bar 

在ECMA 5之前, this在内部函数中是指全局窗口对象; 而从ECMA 5来看, this在内部函数中是不确定的。

没有self修正:正如gal007中提到的那样,在self定义的时候没有定义就是对全局window对象的引用

程序员有时在自己修改范围的时候会selfvariables来引用thisvariables,但是仍然需要引用this但是由于上下文已经改变,所以不能this

没有“自我”,除非你使用一个实现它的框架,但是默认情况下在Javascript中只有“this”。

即使在上下文发生变化的情况下,“自我”也被用来保持对“原始”的引用。 这是一个常用于事件处理程序的技术。

 SomeClass.prorotype.addButton(){ var self = this; // this = SomeClass instance someButton.onclick = function(){ //Here this = someButton //Here self = SomeClass instance self.showDefauMessage(); } } SomeClass.prorotype.showDefauMessage(){ alert("Default message"); } 

如果你在一个事件中使用“this”,这个= someButton,你需要这个= SomeClass。 所以你需要将“this”的引用保存到“self”中以使用内部事件。

如果你在操纵DOM ,那么window = self。 尝试:

 alert(window == self); 

希望它能帮助你!