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__