JavaScript的對(duì)象都有一個(gè)內(nèi)置的Prototype私有屬性,這個(gè)屬性指向另一個(gè)對(duì)象,我們稱這個(gè)對(duì)象為原對(duì)象的原型。
本文操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
javascript 原型 是什么?(包括作用:繼承)
學(xué)習(xí)目標(biāo):
認(rèn)識(shí)什么js是原型,原型、構(gòu)成函數(shù)、實(shí)例對(duì)象關(guān)系;原型應(yīng)用范圍。
什么是原型
函數(shù)有原型,函數(shù)有一個(gè)屬性叫prototype,函數(shù)的這個(gè)原型指向一個(gè)對(duì)象,這個(gè)對(duì)象叫原型對(duì)象。這個(gè)原型對(duì)象有一個(gè)constructor屬性,指向這個(gè)函數(shù)本身。
實(shí)例對(duì)象也存在原型,實(shí)例對(duì)象存在原型對(duì)象是__proto__,__proto__一般被叫隱身原型,這個(gè)隱身原型有一個(gè)constructor屬性,該屬性指向創(chuàng)建該實(shí)例的構(gòu)造函數(shù)。
構(gòu)造函數(shù)、實(shí)例對(duì)象和原型直接關(guān)系
構(gòu)造函數(shù)和實(shí)例對(duì)象關(guān)系
在每一個(gè)實(shí)例對(duì)象中的__proto__中同時(shí)有一個(gè) constructor 屬性,該屬性指向創(chuàng)建該實(shí)例的構(gòu)造函數(shù):
實(shí)例對(duì)象__proto__和構(gòu)造函數(shù)prototype關(guān)系
在每一個(gè)實(shí)例對(duì)象中的__proto__指向構(gòu)造函數(shù)中prototype 兩個(gè)是相等的。
構(gòu)造函數(shù),prototype原型對(duì)象,實(shí)例對(duì)象,proto,constructor,直接關(guān)系
原型作用
- 原型作用之一:數(shù)據(jù)共享,節(jié)省內(nèi)存空間
- 原型作用之二:為了實(shí)現(xiàn)繼承
原型如何數(shù)據(jù)共享,節(jié)約內(nèi)存空間
JavaScript 面向?qū)ο缶幊?/p>
原型如何實(shí)現(xiàn)繼承
比如,現(xiàn)在有一個(gè)"動(dòng)物"對(duì)象的構(gòu)造函數(shù)。
還有一個(gè)"貓"對(duì)象的構(gòu)造函數(shù)。
怎樣才能使"貓"繼承"動(dòng)物"呢?
如果"貓"的prototype對(duì)象,指向一個(gè)Animal的實(shí)例,那么所有"貓"的實(shí)例,就能繼承Animal了。
cat1實(shí)例對(duì)象與構(gòu)造函數(shù)關(guān)系圖如下
任何一個(gè)prototype對(duì)象都有一個(gè)constructor屬性,指向它的構(gòu)造函數(shù)。
添加 Cat.prototype = new Animal();代碼以后
Cat.prototype.constructor指向Animal。
cat1實(shí)例對(duì)象與構(gòu)造函數(shù)關(guān)系圖如下
推薦學(xué)習(xí):《javascript基礎(chǔ)教程》