第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

js里的繼承是怎樣的

??? function Exx(){}
??? Exx.prototype.z = 1;
??? var obj = new Exx();
??? console.log(obj instanceof Object);//true 能證明所有對象皆是繼承自Object嗎?
??? var des = Object.getOwnPropertyDescriptor(Object,"prototype");//正確
?var des = obj.getOwnPropertyDescriptor(Object,"prototype");//錯誤? 沒有這個方法,為什么,不是繼承自那個對象嗎
var des = obj.getOwnPropertyDescriptor(obj,"prototype");//錯誤 obj不是也應該有這個屬性嗎
var des = Object.getOwnPropertyDescriptor(Exx,"prototype");//錯誤 ?
var des = Exx.getOwnPropertyDescriptor(Exx,"prototype");//錯誤 ?

正在回答

4 回答

你的問題太多太零散了,我挑重點的回答下。


prototype是函數(shù)對象默認就會有一個對象屬性。本身也是對象,它的作用是:作為通過new 構造函數(shù)調用時產(chǎn)生的對象的原型。


JS是基于原型鏈繼承的,和Java/C#這種基于類繼承的語言有很大不同,后面OOP會展開講解,不是一句兩句說得清楚的。感興趣也可以自己查閱JavaScript OOP相關資料。


函數(shù)是對象并不只是JavaScript這樣做,這叫做first class function(第一類函數(shù))特性,很多語言都有。百度一下。



3 回復 有任何疑惑可以回復我~
function?Exx(){}
Exx.prototype.z?=?1;
var?obj?=?new?Exx();
console.log(obj?instanceof?Object);//問題1:?true?能證明所有對象皆是繼承自Object嗎?
var?des?=?Object.getOwnPropertyDescriptor(Object,"prototype");//正確
var?des?=?obj.getOwnPropertyDescriptor(Object,"prototype");//問題2:錯誤??沒有這個方法,為什么,不是繼承自那個對象嗎
var?des?=?obj.getOwnPropertyDescriptor(obj,"prototype");//問題3.?錯誤?obj不是也應該有這個屬性嗎
var?des?=?Object.getOwnPropertyDescriptor(Exx,"prototype");//錯誤??
var?des?=?Exx.getOwnPropertyDescriptor(Exx,"prototype");//錯誤

問題1: true 能證明所有對象皆是繼承自Object?

答:instanceof檢查的是左邊對象的原型鏈上是否有右邊構造器的prototype屬性。(詳看第一章數(shù)據(jù)類型有instanceof的講解),一般情況下,對象字面量、一般函數(shù)構造器用new構造的對象,原型鏈上都會有Object.prototype, 所以instanceof Object返回true,但并不是所有對象都這樣。例如:

var?obj?=?Object.create(null);?//?這里指定創(chuàng)建一個原型為null的對象
obj?instanceof?Object;?//false

問題2:錯誤 ?沒有這個方法,為什么,不是繼承自那個對象嗎?
getOwnPropertyDescriptor是Object構造器函數(shù)對象上的方法,而不是Object.prototype上的方法,所以不可以直接在一般對象上調用getOwnPropertyDescriptor。


問題3. 錯誤?obj不是也應該有這個屬性嗎?

同2,例如Object.prototype.toString方法存在,所以一般對象都有toString可以使用:

var obj = {};

obj.toString; // function

但getOwnPropertyDescriptor是Object函數(shù)對象上的方法,而不是Object.prototype上的方法,不會出現(xiàn)在所有一般的對象上。

3 回復 有任何疑惑可以回復我~
#1

xiao_bao2014 提問者

function Person(){}; function Student(){}; Student.prototype = new Person(); var s = new Student(); s instanceof Person; 又看了一遍您那個nstanceof js的類的protype竟然是指向一個new后的實例來實現(xiàn)繼承的 protype上可以放基礎變量可以放對象 還包含著指向實例的指針【不知道能不能叫指針】 ?剛深入看js有點暈
2015-01-29 回復 有任何疑惑可以回復我~
#2

Bosn 回復 xiao_bao2014 提問者

JS中木有指針的概念呀,反復的看一下原型鏈的小節(jié)吧,如果有問題,恢復帖子把問題寫的具體點喲~~~另外建議開新帖,這種回復我收不到消息通知...
2015-01-29 回復 有任何疑惑可以回復我~

建議去看阮一峰javascript技術blog。

0 回復 有任何疑惑可以回復我~

聽您的解釋看我這樣說對嗎?

哦,這種是原型鏈繼承,只要不在prototype上的屬性就不會被繼承

除了那個var?obj?=?Object.create(null);外new出來的都有prototype,這對象可以有自己prototype上的變量甚至對象,

也指向了繼承自的上級prototype上的屬性 ,那prototype算是什么數(shù)據(jù)類型??

網(wǎng)上有說prototype是上級的實例,是上級的引用? js中有類和對象的概念嗎?和java有什么不同嗎?感覺js很隨意,一個函數(shù)就是一個對象,var?obj?=?new?Exx();?obj?的prototype和Exx的prototype ?是obj->Exx->Object 感覺不到類和對象的區(qū)分

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
JavaScript深入淺出
  • 參與學習       281098    人
  • 解答問題       1048    個

由淺入深學習JS語言特性,且解析JS常見誤區(qū),從入門到掌握

進入課程

js里的繼承是怎樣的

我要回答 關注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號