在java-script中,我有一个函数将返回一个如下对象(一般目标是用它来创建新对象):
function Info()
{
return {x: 0, y: 0 }
}
现在我不知道java脚本如何处理以下两个语句:
var objInfo1 = new Info(); /* I know this doesn't make sense but still works */
var objInfo2 = Info();
而且我也知道在使用new关键字时你应该遵循这个语法
function Info()
{
this.x = 0;
this.y = 0;
}
以上两个语句都给出相同的结果,相同的类型。
现在这里java脚本忽略了新关键字,或者因为返回而创建了2个对象,因为返回了?
是否有任何性能影响?
答案 0 :(得分:1)
在JavaScript中,新关键字有些灵活。
如果你有一个返回一个对象的函数,那么使用new
关键字实际上不会改变任何东西:
function A() {
return { x: 1, y: 2 };
}
const a1 = new A();
const a2 = A();
console.log(a1);
console.log(a1 instanceof A);
console.log(a2);
console.log(a2 instanceof A);
如果你的函数没有直接返回一个对象,那么你需要new关键字来创建一个对象的实例,而不是只运行该函数:
function A() { }
const a1 = new A();
const a2 = A();
console.log(a1);
console.log(a1 instanceof A);
console.log(a2);
console.log(a2 instanceof A);
没有真正的性能影响。
对于返回新对象的函数,通常称为factory method。在JavaScript中,它只是灵活的。