这两个代码有什么区别?
let user = new function() {
this.name = "John";
this.isAdmin = false;
}
对比
let user = {
name: "John",
isAdmin: false
}
这两个代码有什么区别?
let user = new function() {
this.name = "John";
this.isAdmin = false;
}
对比
let user = {
name: "John",
isAdmin: false
}
唯一的区别是第一个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);
首先,它们都创建了一个新对象,并将其中的以下代码分配给该对象。然后他们执行函数体中的代码并返回值。