javascript - javascript中定义对象的各种方式之间的区别

标签 javascript

在 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/

相关文章:

javascript - 错误 : parser error, 0 of 4344 bytes parsed (Node.js)

javascript - Node.js/Express POST 数据未发送

javascript - 如果接下来 10 秒内没有隐藏则隐藏 div

javascript - 检测 iframe 上的鼠标位置

php - javascript错误地确定了夏令时线(2006年的示例)

javascript - 跨组件中的函数访问事件监听器数据

javascript - Ajax 和 JavaScript |限制用户触发的请求

javascript - 苹果网络后端技术

javascript - react 无状态组件

javascript - 将数组中的位置分配为 react 键?