JS-显式原型和隐式原型

概念:

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__属性即隐式原型

给原型对象增加属性(大多为方法)

最后会添加到堆内存的原型对象里,所以可以引用。

总结:流程图

发布了20 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/heyNewbie/article/details/105734368