var F = function(){}; F.prototype.a = function(){}; Object.prototype.b = function(){}; Function.prototype.c = function(){}; var f = new F(); f.name = '111'; console.log(f)
打印f结果:实例化自构造函数F的对象,f有一个私有的name属性
展开对象
对象 f 下有 name 属性和 _proto_ 属性,所有对象在创建时都有一个不公开的 _proto_ 内置属性,这个属性的值就是f的构造原型对象,在这里对象 f 实例自构造函数F,函数对象F的原型为 F.prototype,即 f._proto_ = F.prototype
var F = function(){}; F.prototype.a = function(){}; Object.prototype.b = function(){}; Function.prototype.c = function(){}; var f = new F(); f.name = '111'; console.log(f) console.log(F.prototype)
在JavaScript语言中,constructor 属性是专门为 function 而设计的,它存在于每一个构造函数的原型对象的属性中(F.prototype.constructor );这个 constructor 保存了指向构造函数的一个引用。
在此例中,F.prototype.constructor 指向函数 F;每一个实例都继承原型上的属性和方法,即 F.prototype.constructor = f.constructor = F
*区分prototype和_proto_
prototype是挂载在构造函数上的原型对象
_proto_是所有对象在创建时都有的内置属性,这个属性的值是构造该对象的函数上挂载的原型
如上例 f._proto_ = F.prototype