在javascript中定义对象的各种方式之间的差异

时间:2015-12-28 20:47:27

标签: javascript

在javascript中,我们可以用各种方式定义对象原型。

第一个

var foo={
a:1,
b:2
}

第二是

var foo=function(){
this.a=1;
this.b=2;
}

我所知道的是,第一个是对象本身,而从第二个定义创建对象时我们必须使用新的foo()。这两个定义之间是否有任何其他差异。如果两者相同则需要第二个,如果不是那么首先需要什么?

1 个答案:

答案 0 :(得分:1)

它们不一样,第二个是Object的构造函数:



var foo = {
  a: 1,
  b: 2
}
console.log("First: ",
    typeof foo, // object
    JSON.stringify(foo), // {a:1,b:2}
    foo.constructor) // function Object() { [native code] }

var foo = function() {
  this.a = 1;
  this.b = 2;
}
console.log("Second: ",
    typeof foo, // function
    JSON.stringify(foo), // undefined, foo is not an Object, it's a function!
    foo.constructor) // function Object() { [native code] }

var foo = new foo()
console.log("Thrid: ",
    typeof foo, // object
    JSON.stringify(foo), // {a:1,b:2}
    foo.constructor) // function() {  this.a = 1;  this.b = 2;}




因此,即使在创建两个对象后,您的.constructor属性也会有差异。由于第一个Object是由Native构造函数vor在JavaScript中创建的,第二个是由自定义构造函数创建的。

但那是唯一的差异