为什么两个控制台 .log 都给出相同的输出 [重复]

why both the consoles.log are giving same output [duplicate]

提问人:RAJYAVARDHAN SINGH RATHORE 提问时间:12/15/2022 最后编辑:DanielRAJYAVARDHAN SINGH RATHORE 更新时间:12/15/2022 访问量:40

问:

function sum(){
  console.log(this);
}
 
var sum1= new sum();
console.log(sum1);

我得到 sum{} sum{} 作为输出,我对这个结果感到非常困惑

JavaScript 函数 控制台.log

评论

1赞 derpirscher 12/15/2022
你会期待什么?
2赞 Bergi 12/15/2022
你还能期待什么?您正在构造一个实例,并记录它两次。
1赞 Barmar 12/15/2022
在构造函数内部,是正在构造的新对象。这与它自动返回的对象相同。this

答:

1赞 Dan 12/15/2022 #1

你得到两个输出,因为关键字实际上执行了newfunction sum()

查看运算符

  1. 使用给定的参数执行构造函数,将 newInstance 绑定为 this 上下文(即 构造函数现在引用 newInstance)。
0赞 Daniel 12/15/2022 #2

当您创建函数时,它会创建自己的内部实例 (this)

当您与函数一起使用时,它将返回此内部实例。new

以下示例说明了它是相同的实例,这就是控制台日志显示相同实例的原因。

function sum(){
  this.a = 1
  console.log(this);
}
 
var sum1 = new sum();
console.log(sum1);

请注意,如果您不使用行为更改。在本例中,是全局上下文,返回值(和第二个日志结果)是newthisundefined

function sum(){
  this.a = 1
  console.log(this);
}
 
var sum1 = sum();
console.log(sum1);

据我所知,这个构造函数语法被引入到 JS 中,作为做类的一种方式,它充当类构造函数。以下是一些可能对 https://javascript.info/constructor-new#constructor-function 有所帮助的额外阅读材料

0赞 Daniel 12/15/2022 #3

在 JavaScript 中,函数可以用作构造函数。

例如,您可以定义构造函数:

function Cat(color) {
   this.color = color
}

并将它们用作

const cat = new Cat("black");

所以:

在第一个示例中,您将其作为初始化对象的实例。您可以使用它来创建他的属性。如果使用关键字 ,则返回该对象。thisnew

因此,在我的示例中,您将在构造函数中看到:

this = {} // before assignment
this = {color: "black"} // after line this.color = color

当你使用时,你会看到准备好的猫new

{color: "black"}

在某些浏览器中,您还会看到构造函数的名称。就我而言,在您的 .Catsum


请注意,使用大写字母作为构造函数的名称是约定的。您将看到 .在引擎盖下使用函数来定义构造函数的只是语法糖。class