javascript对象方法中的新构造函数

javascript对象方法中的新构造函数,javascript,object,methods,constructor,new-operator,Javascript,Object,Methods,Constructor,New Operator,嘿,我只是想找一个javascript解释来解释为什么“构造函数调用”只调用一次而不是5次 const Dog = function(name, age){ this.name = name; this.age = age; console.log('constructor called'); } 在名为dog的对象上声明一个属性,表达式newdog(…)将立即求值。这就是为什么您只看到一个日志,因为构造函数只被调用一次 此版本将调用构造函数5次: const obj = {

嘿,我只是想找一个javascript解释来解释为什么“构造函数调用”只调用一次而不是5次

const Dog = function(name, age){
  this.name = name; 
  this.age = age; 
  console.log('constructor called'); 
}

在名为
dog
的对象上声明一个属性,表达式
newdog(…)
将立即求值。这就是为什么您只看到一个日志,因为构造函数只被调用一次

此版本将调用构造函数5次:

const obj = {
  // Notice the use of a function here. 
  dog: () => new Dog('roofus', 20)
}
for(设i=0;i<5;i++){
//在这里调用函数。
console.log(obj.dog())
}

你认为为什么狗会被叫来5次?您创建的实例被记录了5次,但是当您定义
obj
时,
new Dog()
只被调用一次。这是因为new关键字立即在obj内执行构造函数吗?@Rez88正确:o
const main = ()=>{
  for(let i = 0; i < 5; i++){
    console.log(obj.dog)
  }
}
main();
'constructor called'
Dog { name: 'roofus', age: 20 }
Dog { name: 'roofus', age: 20 }
Dog { name: 'roofus', age: 20 }
Dog { name: 'roofus', age: 20 }
Dog { name: 'roofus', age: 20 }
const obj = {
  // Notice the use of a function here. 
  dog: () => new Dog('roofus', 20)
}
for(let i = 0; i < 5; i++){
    // Call the function here.
    console.log(obj.dog())
}