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__