js里的繼承是怎樣的
??? function Exx(){}
??? Exx.prototype.z = 1;
??? var obj = new Exx();
??? console.log(obj instanceof Object);//true 能證明所有對(duì)象皆是繼承自O(shè)bject嗎?
??? var des = Object.getOwnPropertyDescriptor(Object,"prototype");//正確
?var des = obj.getOwnPropertyDescriptor(Object,"prototype");//錯(cuò)誤? 沒有這個(gè)方法,為什么,不是繼承自那個(gè)對(duì)象嗎
var des = obj.getOwnPropertyDescriptor(obj,"prototype");//錯(cuò)誤 obj不是也應(yīng)該有這個(gè)屬性嗎
var des = Object.getOwnPropertyDescriptor(Exx,"prototype");//錯(cuò)誤 ?
var des = Exx.getOwnPropertyDescriptor(Exx,"prototype");//錯(cuò)誤 ?
2015-01-29
你的問題太多太零散了,我挑重點(diǎn)的回答下。
prototype是函數(shù)對(duì)象默認(rèn)就會(huì)有一個(gè)對(duì)象屬性。本身也是對(duì)象,它的作用是:作為通過new 構(gòu)造函數(shù)調(diào)用時(shí)產(chǎn)生的對(duì)象的原型。
JS是基于原型鏈繼承的,和Java/C#這種基于類繼承的語言有很大不同,后面OOP會(huì)展開講解,不是一句兩句說得清楚的。感興趣也可以自己查閱JavaScript OOP相關(guān)資料。
函數(shù)是對(duì)象并不只是JavaScript這樣做,這叫做first class function(第一類函數(shù))特性,很多語言都有。百度一下。
2015-01-29
問題1: true 能證明所有對(duì)象皆是繼承自O(shè)bject?
答:instanceof檢查的是左邊對(duì)象的原型鏈上是否有右邊構(gòu)造器的prototype屬性。(詳看第一章數(shù)據(jù)類型有instanceof的講解),一般情況下,對(duì)象字面量、一般函數(shù)構(gòu)造器用new構(gòu)造的對(duì)象,原型鏈上都會(huì)有Object.prototype, 所以instanceof Object返回true,但并不是所有對(duì)象都這樣。例如:
問題2:錯(cuò)誤 ?沒有這個(gè)方法,為什么,不是繼承自那個(gè)對(duì)象嗎?
getOwnPropertyDescriptor是Object構(gòu)造器函數(shù)對(duì)象上的方法,而不是Object.prototype上的方法,所以不可以直接在一般對(duì)象上調(diào)用getOwnPropertyDescriptor。
問題3. 錯(cuò)誤?obj不是也應(yīng)該有這個(gè)屬性嗎?
同2,例如Object.prototype.toString方法存在,所以一般對(duì)象都有toString可以使用:
var obj = {};
obj.toString; // function
但getOwnPropertyDescriptor是Object函數(shù)對(duì)象上的方法,而不是Object.prototype上的方法,不會(huì)出現(xiàn)在所有一般的對(duì)象上。
2015-06-08
建議去看阮一峰javascript技術(shù)blog。
2015-01-29
聽您的解釋看我這樣說對(duì)嗎?
哦,這種是原型鏈繼承,只要不在prototype上的屬性就不會(huì)被繼承
除了那個(gè)var?obj?=?Object.create(null);外new出來的都有prototype,這對(duì)象可以有自己prototype上的變量甚至對(duì)象,
也指向了繼承自的上級(jí)prototype上的屬性 ,那prototype算是什么數(shù)據(jù)類型??
網(wǎng)上有說prototype是上級(jí)的實(shí)例,是上級(jí)的引用? js中有類和對(duì)象的概念嗎?和java有什么不同嗎?感覺js很隨意,一個(gè)函數(shù)就是一個(gè)對(duì)象,var?obj?=?new?Exx();?obj?的prototype和Exx的prototype ?是obj->Exx->Object 感覺不到類和對(duì)象的區(qū)分