在 JavaScript 中,我们可以通过多种方式定义对象原型(prototype)。
第一个
var foo={
a:1,
b:2
}
第二个是
var foo=function(){
this.a=1;
this.b=2;
}
我知道的是,第一个本身就是一个对象,而要从第二个定义创建对象,我们必须使用 new foo()。这两个定义之间还有其他区别吗?如果两者相同,那么第二个需要什么,如果不是,那么第一个需要什么?
最佳答案
它们不一样,第二个是对象的构造函数:
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
属性也会有所不同。因为第一个对象是由 JavaScript 中的 native 构造函数或对象创建的,第二个对象是由您的自定义构造函数创建的。
但这是唯一的区别
关于javascript - javascript中定义对象的各种方式之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34500541/