Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        去年关闭。
                                                                                            
                
        


var MyObject = function(x, y) {
  self.x = x;
  self.y = y;
  return self;
}

var myObjects = [];


var f1 = new MyObject(150, 200);
var f2 = new MyObject(250, 250);
var f3 = new MyObject(300, 500);
myObjects.push(f1);
myObjects.push(f2);
myObjects.push(f3);

for (var i = 0; i < myObjects.length; i++) {
  console.log(myObjects[i].x);
}





控制台记录为3乘以300,这是最后一个元素的x。我不知道结果如何发生?

最佳答案

基本上,与推送无关。当您执行self.x = x时,它正在更新作为窗口的全局对象(例如,在全局范围内),并且您正在返回window。您的数组包含[window, window, window],并且每次您在窗口中覆盖xy时。使用this代替创建原型对象,如果使用new则无需返回;

09-10 13:10
查看更多