以下两种在JavaScript中创建对象的方法之间有什么区别
function createFoo(){
var _foo = { id: 1 };
return _foo;
}
var foo = createFoo();
和
function Foo(){
this.id = 1;
}
var foo2 = new Foo();
答案 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);
这就是我所能想到的。