Javascript 数组推送改变所有元素

Javascript 数组推送改变所有元素,javascript,Javascript,var MyObject=函数(x,y){ self.x=x; self.y=y; 回归自我; } var myObjects=[]; var f1=新的MyObject(150200); var f2=新的MyObject(250250); var f3=新的MyObject(300500); 肌对象推(f1); 肌对象推(f2); 肌对象推(f3); 对于(var i=0;i

var MyObject=函数(x,y){
self.x=x;
self.y=y;
回归自我;
}
var myObjects=[];
var f1=新的MyObject(150200);
var f2=新的MyObject(250250);
var f3=新的MyObject(300500);
肌对象推(f1);
肌对象推(f2);
肌对象推(f3);
对于(var i=0;i}
基本上,与推送无关。当您执行
self.x=x
时,它正在更新全局对象(如全局范围中的对象),该对象是窗口,您将返回窗口。您的数组包含
[窗口,窗口,窗口]
,每次您在窗口中重写
x
y
。使用
this
创建原型的对象,如果使用
new
,则无需返回

基本上与推压无关。当您执行
self.x=x
时,它正在更新全局对象(如全局范围中的对象),该对象是窗口,您将返回窗口。您的数组包含
[窗口,窗口,窗口]
,每次您在窗口中重写
x
y
。使用
this
创建原型的对象,如果使用
new
,则无需返回

Window.self只读属性将窗口本身作为WindowProxy返回。它可以与窗口对象(即window.self)或独立对象(self)上的点表示法一起使用

:

在大多数情况下,
this
的值取决于函数的调用方式。它不能在执行期间通过赋值进行设置,每次调用函数时可能会有所不同

通过使用或不使用
new
关键字,您可以注意到示例中
的区别:

函数foo(){
console.log({
isThisEqualToWindow:self==这个,
self:self.toString(),
this:this.toString()
});
}
新foo();
foo()

Window.self只读属性将窗口本身作为WindowProxy返回。它可以与窗口对象(即window.self)或独立对象(self)上的点表示法一起使用

:

在大多数情况下,
this
的值取决于函数的调用方式。它不能在执行期间通过赋值进行设置,每次调用函数时可能会有所不同

通过使用或不使用
new
关键字,您可以注意到示例中
的区别:

函数foo(){
console.log({
isThisEqualToWindow:self==这个,
self:self.toString(),
this:this.toString()
});
}
新foo();

foo()您也可以执行var self=this

您也可以执行var self=this

什么是自我
?你是说
这个
self
很可能是
窗口
;您肯定希望
self引用窗口对象,这导致f1、f2、f3指向同一对象,因此它显示300作为窗口对象上x属性的值有些人引用var self=this;什么是
self
?你是说
这个
self
很可能是
窗口
;您肯定希望
self引用窗口对象,这导致f1、f2、f3指向同一对象,因此它显示300作为窗口对象上x属性的值有些人引用var self=this;我想,我们可以覆盖
window.self
我想,我们可以覆盖
window.self