天天看点

原型、原型链的相关知识点

1、原型:(普通对象、函数对象function)每个对象都有原型(null/undefined除外)即对象默认的属性和方法

    可以用原型来创建对象的属性和方法

    Hero.prototype.name;

    Hero.prototype.sayMe = function(){"添加对象的方法其实就是添加函数"}

【1】Object:Object是一个函数对象,Object的原型就是一个Object对象

【2】新建对象:newObject或者{}建的对象是普通对象。没有prototype属性,但是有_proto_属性,

指向了Object.prototype

【3】Array:Array也是一个函数对象,它的原型就是Array.prototype,里面存在一些数组的方法和属性

eg.push,pop,shift,unshift

【4】Function:Function是一个函数对象,它的原型是一个function空函数

【5】自定义函数:它的原型是你给它指定的,如果不指定,原型是Object.prototype

2.__proto__(前后都有两个短横线):[[Prototype]]-->_proto_是一个内置属性,是指向构造函数的prototype

【三】.原型链

Person.prototype.__proto__属性:指向Objet对象的prototype

Object.prototype.__proto__:null

由子对象的__proto__属性指向父级的prototype,同时父级的prototype的__proto__属性继续指向上一级的

prototype依次类推知道最后指向Object的prototype同时,Object的prototype的__proto__最终指向null

到达原型链的顶端

【四、疑惑点】

1、Object.__proto__===Function.prototype;

Object是函数对象  new Function()创建

2、Function.__proto__===Function.prototype;

Function是函数对象  new Function()创建,所以Function的__proto__指向构造函数的prototype

3、Function.prototype.__proto__===Object.prototype;

万物皆对象,要保证整个原型链的完整

【五】constructor属性:原型对象中的prototype都有一个预定的constructor属性,用来引用它的函数对象,是一种循环引用

var Person=function(){};

undefined

Person.prototype.constructor===Person;

true

Function.prototype.constructor===Function;

true

Object.prototype.constructor===Object;

true

【六】

1、原型和原型链是JS实现继承的一种模式

2、原型链的行程真正依靠的是__proto__

继续阅读