在这种情况下如何创建对象?
How come the object is created in this case?
在这种情况下 prototype
对象不再有 constructor
属性。这里只是一个空对象。但是,尽管如此,new obj.constructor
仍然以某种方式创建了一个空对象。怎么样?
function Constructor() {
this.name = 'Kira';
this.age = 35;
this.city = 'New-York';
};
Constructor.prototype = {};
let obj = new Constructor;
let obj2 = new obj.constructor;
console.log(obj2); //{}
这里也创建了对象。在 Chrome 浏览器的控制台中,它显示为 String
.
function User(name) {
this.name = name;
}
User.prototype = {};
let user = new User('John');
let user2 = new user.constructor('Pete');
console.log(user2);
怎么可能?这里的对象是如何创建的?
将原型设置为 {}
并不意味着没有属性。这意味着唯一的属性是您会在新对象上找到的属性。特别是,constructor
属性 来自原型并指向 Object
const o = {};
console.log("has constructor property:",
"constructor" in o);
console.log("constructor property is own:",
o.hasOwnProperty("constructor"));
console.log("constructor property comes from prototype:",
Object.getPrototypeOf(o).hasOwnProperty("constructor"));
console.log("constructor property is Object():",
o.constructor === Object);
因此,当您调用 new obj.constructor
时,它等同于 new Object
。
function Foo() {};
Foo.prototype = {};
let obj = new Foo;
console.log(obj.constructor === Object);
console.log(obj.constructor === ({}).constructor);
let obj2 = new obj.constructor;
console.log(obj2); //{}
当调用 new user.constructor('Pete');
时,它再次只是调用全局 Object
,因此它与 new Object('Pete')
相同。如果您传递一个具有对象包装器的值,您将从构造函数中获取该包装器:
const pete = new Object('Pete');
console.log(typeof pete, pete instanceof String);
const answer = new Object(42);
console.log(typeof answer, answer instanceof Number);
在这种情况下 prototype
对象不再有 constructor
属性。这里只是一个空对象。但是,尽管如此,new obj.constructor
仍然以某种方式创建了一个空对象。怎么样?
function Constructor() {
this.name = 'Kira';
this.age = 35;
this.city = 'New-York';
};
Constructor.prototype = {};
let obj = new Constructor;
let obj2 = new obj.constructor;
console.log(obj2); //{}
这里也创建了对象。在 Chrome 浏览器的控制台中,它显示为 String
.
function User(name) {
this.name = name;
}
User.prototype = {};
let user = new User('John');
let user2 = new user.constructor('Pete');
console.log(user2);
怎么可能?这里的对象是如何创建的?
将原型设置为 {}
并不意味着没有属性。这意味着唯一的属性是您会在新对象上找到的属性。特别是,constructor
属性 来自原型并指向 Object
const o = {};
console.log("has constructor property:",
"constructor" in o);
console.log("constructor property is own:",
o.hasOwnProperty("constructor"));
console.log("constructor property comes from prototype:",
Object.getPrototypeOf(o).hasOwnProperty("constructor"));
console.log("constructor property is Object():",
o.constructor === Object);
因此,当您调用 new obj.constructor
时,它等同于 new Object
。
function Foo() {};
Foo.prototype = {};
let obj = new Foo;
console.log(obj.constructor === Object);
console.log(obj.constructor === ({}).constructor);
let obj2 = new obj.constructor;
console.log(obj2); //{}
当调用 new user.constructor('Pete');
时,它再次只是调用全局 Object
,因此它与 new Object('Pete')
相同。如果您传递一个具有对象包装器的值,您将从构造函数中获取该包装器:
const pete = new Object('Pete');
console.log(typeof pete, pete instanceof String);
const answer = new Object(42);
console.log(typeof answer, answer instanceof Number);