【原型和原型链】什么是原型和原型链
发布日期:2021-05-08 07:48:14 浏览次数:17 分类:精选文章

本文共 1029 字,大约阅读时间需要 3 分钟。

一、原型

①所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象

②所有函数都有一个prototype(原型)属性,属性值是一个普通的对象
③所有引用类型的__proto__属性指向构造函数的prototype

var a = [1,2,3];a.__proto__ === Array.prototype; // true

二、原型链

当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。

举例,有以下代码

​function Parent(month){     this.month = month;} var child = new Parent('Ann');console.log(child.month); // Ann console.log(child.father); // undefined​

在child中查找某个属性时,会执行下面步骤

访问链路为:

 

①一直往上层查找,直到到null还没有找到,则返回undefined

Object.prototype.__proto__ === null
③所有从原型或更高级原型中的得到、执行的方法,其中的this在执行时,指向当前这个触发事件执行的对象

 

每一个对象数据类型(普通的对象、实例、prototype......)也天生自带一个属性__proto__,属性值是当前实例所属类的原型(prototype)。原型对象中有一个属性constructor, 它指向函数对象。

function Person() {}    var person = new Person()    console.log(person.__proto__ === Person.prototype)//true    console.log(Person.prototype.constructor===Person)//true    //顺便学习一个ES5的方法,可以获得对象的原型    console.log(Object.getPrototypeOf(person) === Person.prototype) // true

上一篇:vue2.0$nextTick监听数据渲染完成之后的回调函数方法
下一篇:vue实现按需加载的两种方式

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年03月21日 08时17分20秒