foo = createFoo()和foo = new Foo()之间的区别

时间:2014-11-22 00:40:43

标签: javascript prototype

以下两种在JavaScript中创建对象的方法之间有什么区别

function createFoo(){
    var _foo = { id: 1 };
    return _foo;
}
var foo = createFoo();

function Foo(){
    this.id = 1;
}
var foo2 = new Foo();

2 个答案:

答案 0 :(得分:1)

在chrome控制台中运行代码可以获得有关2个变量内容的更多信息:

> foo
Object {id: 1}
> foo2
Foo {id: 1}

所以有区别。 剧透警报!!答案在于原型链:

> foo.__proto__
Object {}
> foo2.__proto__
Foo {}

如果您需要更多详细信息,请参阅这篇精彩帖子:https://stackoverflow.com/a/3658673/2523414

答案 1 :(得分:0)

实例化从这些函数创建和访问的对象的方式有许多不同之处。例如:

function createFoo(){
   var _foo = { id: 1 };
   return _foo;
}
var foo = createFoo();

如果要获取id属性的值,则必须迭代foo对象中的属性,如下所示:

for(var prop in foo){
   //if you want to set new value then
   foo[prop] = 5;
   //then getting value is like this
   console.log(foo[prop]);
}

在你的第二个例子中,获取/设置值的方式不同:

function Foo(){
    this.id = 1;
} 
var foo2 = new Foo();
foo2.id = 2;//set new value
console.log(foo2.id);

这就是我所能想到的。