概念:
1、函数对象--函数的prototype原型链上的属性指向的原型对象,创建函数时就已经存在,默认为空的Object
2、实例对象--函数实例化之后,产生的_proto_隐式原型,他的值等同于构造函数中的显式prototype原型属性值
3、ES6之前,可操作性显式原型prototype上的方法和属性,不能直接操作隐式_proto_
每个函数都有一个prototype原型属性,显式原型属性或者显式原型,
每个实例函数都有一个_proto_原型属性,隐式原型属性或者隐式原型
function Animal (type) {
this.type = type;
this.eat = function () {
console.log("eating food")
}
}
var dog = new Animal("dog")
console.log(dog) // Animal {type: "dog", eat: ƒ}
console.log(dog.prototype) // undefined
console.log(dog.__proto__) // {constructor: ƒ}
上结构图
内存结构图
函数对象的prototype原型属性指向空对象object---原型对象
Fn.prototype→空object即原型对象
创建实例对象 fn,地址值指向Fn的实例对象
实例对象的__proto__属性即隐式原型
给原型对象增加属性(大多为方法)
最后会添加到堆内存的原型对象里,所以可以引用。
总结:流程图