鉴于以下程序,控制台正确记录 - 请注意链式init
函数和return this
:
const cat = {
init(sound) {
this.sound = sound;
return this;
},
makeSound() {
console.log(this.sound);
}
};
const fluffy = Object.create(cat).init('meeeaaaauuu');
fluffy.makeSound();
我的问题: return this
如何以及为什么需要它才能正常工作?请参阅下面的错误并将其删除:
const cat = {
init(sound) {
this.sound = sound;
// return this
},
makeSound() {
console.log(this.sound);
}
};
const fluffy = Object.create(cat).init('meeeaaaahuuu');
fluffy.makeSound();
MDN状态Object.create返回新对象,因此链接init()应该工作......通过思考... 是因为链接的新对象仍然是'匿名'?
请注意,如果init()
有自己的行,那么所有内容都可以正常运行,而不需要return this
:
const fluffy = Object.create(cat);
fluffy.init('meeeaaaahuuu');
fluffy.makeSound();
答案 0 :(得分:15)
这是有效的原因:
const fluffy = Object.create(cat);
fluffy.init('meeeaaaahuuu');
fluffy.makeSound();
是因为您要为fluffy
分配Object.create
的返回值。当您执行const fluffy = Object.create(cat).init('meeeaaaahuuu');
时,您在init
的返回值上调用Object.create
,并将init
的返回值分配给fluffy
,即{ {1}}没有退货声明。
答案 1 :(得分:4)
正如@zerkms所提到的,如果 @Query(value = "select COUNT(a.doctorId) from Appointment a WHERE a.doctorId = :doctorId AND a.scheduleFromTime = :appointmentDateTime")
Long findAppointmentExists(@Param("doctorId") Long doctorId,
@Param("appointmentDateTime") Date appointmentDateTime);
缺少一个return语句,它将返回init
。
在以下行中,undefined
被分配了fluffy
init
如果const fluffy = Object.create(cat).init('meeeaaaahuuu');
缺少退货声明,则会为init
分配值fluffy
undefined
如果console.log(fluffy); // undefined
返回分配给init
的对象,则会为cat
分配该值。
为了证明这一点,你的链式赋值语句fluffy
可能就这样写成了相同的结果
const fluffy = Object.create(cat).init('meow');