天天看點

原型、原型鍊的相關知識點

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__

繼續閱讀