Skip to content

new Object() 和 Object.create 的区别

区别

  • {} 等同于 new Object(),原型都是 Object.prototype
  • Object.create(null) 没有原型
  • Object.create({...}) 可指定原型
js
const obj1 = {
  a: 10,
  b: 20,
  sum() {
    return this.a + this.b;
  },
};
const obj2 = new Object({
  a: 10,
  b: 20,
  sum() {
    return this.a + this.b;
  },
});
const obj3 = new Object(obj1);
console.log(obj1 === obj2); // false
console.log(obj1 === obj3); // true
const obj4 = Object.create(null); // {} 没有原型
const obj5 = new Object(); // {} 有原型
// obj6 的 __proto__ 原型就是
// {
//     a: 10,
//     b: 20,
//     sum() {
//         return this.a + this.b
//     }
// }
const obj6 = Object.create({
  a: 10,
  b: 20,
  sum() {
    return this.a + this.b;
  },
});
// obj7 的 __proto__ 原型就是 obj1
const obj7 = Object.create(obj1);
console.log(obj7.__proto__ === obj1); // true
console.log(obj7 === obj1); // false

基于 MIT 许可发布