新关键字与返回函数一起使用时如何处理java脚本?

时间:2018-04-09 12:20:56

标签: javascript

在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个对象,因为返回了?

是否有任何性能影响?

1 个答案:

答案 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中,它只是灵活的。