对象文字符号 - 是否应该使用new

时间:2012-12-06 19:25:21

标签: javascript

function foo() {
    return {a:9};
}

var bar = foo();
bar.a //returns 9

function foo() {
    return {a:9};
}

var bar = new foo(); 
bar.a // returns 9

据我所知,新的isnt与对象文字符号一起使用,但是new怎么用它呢?另外,为什么可以使用新对象访问原型,而不是使用对象文字符号?

编辑:

我现在明白了,如果其他任何人偶然发现这个问题/问题,这可能有助于你理解它:

function foo() {
    this.a = "LOL";
    return "WTF";
};
var bar = new foo(); // bar = [Object object]
var c = foo(); // c = "WTF"
window.a // "LOL"

同时阅读接受的答案。

3 个答案:

答案 0 :(得分:7)

在这种情况下使用new与您返回的内容无关,但this位于foo()内。使用newthis将引用foo()内的foo实例。如果没有新的,this将是全局的(可能是window

答案 1 :(得分:5)

它的工作原理是因为如果从作为构造函数调用的函数显式返回非基本类型(使用new),则返回该对象而不是创建的对象。您没有以任何方式在函数中使用创建的对象,因此new是多余的。

在这里你可以看到它不适用于原语:

function test() {
    return "string"; //This is not returned when called with new, because it's primitive
}

var a = new test();
a == "string" // false

function test() {
    return new String("string"); //This is returned when called with new, because it's an object, like {}
}

var b = new test();
b == "string" //true

我正在使用==new String进行演示。你不应该在实践中使用new String

答案 2 :(得分:1)

{}只是new Object()

的捷径