例如:
function F() {};
F.prototype = {
test: function() { console.log('test'); }
};
console.log(F.prototype.constructor); // [Function: Object]
F.prototype = 'string';
var o = new F();
console.log(F.prototype.constructor); // [Function: String]
console.log(F.prototype); // string
console.log(o.constructor); // [Function: Object]
o.test(); // Can't work
在上面的代码中,初始构造函数是F()
,F.prototype.constructor
。但是我将F.prototype
重置为'string'
。还有我的问题:
F.prototype
重置为'string'
后,为什么F.prototype.constructor
变为[Function: String]
。换句话说,它决定了它的价值
F.prototype.constructor
? prototype
对象的属性,因此constructor
属性也是如此。但为什么对象p
的构造函数是原始构造函数[Function: Object]
,而不是[Function: String]
? 提前致谢。
答案 0 :(得分:3)
构造函数字段没什么特别的,它和任何其他字段一样。
回答#1 :
F.prototype = "string";
console.log(F.prototype.constructor); // function String
记录function String
,因为它与
console.log("string".constructor); // function String
回答#2 :
内部__proto__
字段的每个对象都必须为typeof x === "object"
。在原型链的末尾,始终存在null
值(通常是Object.prototype.__proto__
值),并且不允许循环。您为构造函数string
字段(prototype
)分配了一个原语typeof F.prototype === "string"
,该字段不能用作__proto__
,因此new
运算符只会回退到构造具有默认原型的对象,即Object.prototype
。