0

这两个代码有什么区别?

  let user = new function() {
      this.name = "John";
      this.isAdmin = false;
  }

对比

 let user =  {
    name: "John",
    isAdmin: false
}
4

2 回答 2

1

唯一的区别是第一个user,通过创建new,有一个(几乎)空对象的内部原型,并且该空对象继承自Object.prototype

instance <- (empty object) <- Object.prototype

let user = new function() {
  this.name = "John";
  this.isAdmin = false;
};

console.log(user);

从技术上讲,对象并非完全为空,它具有constructor指向函数的不可枚举属性

这个几乎是空的对象是.prototype-function但由于该原型对象上没有任何属性,它看起来是空的。如果您在函数.prototype对象上放置了属性,这些属性将在中间对象上可见:

function Foo() {
  this.name = "John";
  this.isAdmin = false;
}
Foo.prototype.prop = 'val';
let user = new Foo();

console.log(user);
console.log(Object.getPrototypeOf(user).hasOwnProperty('prop'));
console.log(Object.getPrototypeOf(user) === Foo.prototype);

另一方面,来自对象文字的用户直接继承自Object.prototype

instance <- Object.prototype

 let user =  {
    name: "John",
    isAdmin: false
}
console.log(Object.getPrototypeOf(user) === Object.prototype);

于 2020-04-30T11:42:06.543 回答
-1

首先,它们都创建了一个新对象,并将其中的以下代码分配给该对象。然后他们执行函数体中的代码并返回值。

于 2020-04-30T12:23:00.857 回答