本人在學習原型鏈的時候遇到一些困惑如下:
在一些博客(比如阮一峰的博客中), 是這么說的:
JavaScript原生提供Object對象, 所有其他對象都繼承自Object對象,即那些對象都是Object的實例
這里我就感到困惑了, 根據(jù)我的理解,Object難道不應該是一個構(gòu)造函數(shù)么? 因為比如說任何一個實例對象都有.valueOf這個方法, 實際上是引用的Object.prototype這個原型對象里面的方法
而且當我在終端中輸入typeof(Object)返回的是"function", 說明Object應該是一個構(gòu)造函數(shù), 真正的對象應該是Object.prototype吧
但是似乎又不完全是這樣, Object有自己的靜態(tài)方法, 就是直接定義在自身的方法, 比如Object.keys(), 所以說構(gòu)造函數(shù)也是對象? 也是有可以有自己的方法和屬性?
另外又做了一個測試:
var F = function() {}
F.__proto__ === Function.prototype // true
對于這個問題到底該如何理解, 本人剛剛學習javascript, 學習了這些概念以后開始有點糊涂, 希望各位前輩能給出一個清晰的解答, 謝謝!
然而“函數(shù)”也是Object
function rua() {}
console.log(rua instanceof Object)
// true
甚至“類”也是Object
class Rua {}
console.log(Rua instanceof Object)
// true
在js里,一個類同時也是一個對象
在js里,萬物皆Object(除了基本類型),仔細想想,這并沒有任何沖突,這也使得js非常的靈活。
另外為什么你會覺得一個類會(只)是一個“函數(shù)”?構(gòu)造函數(shù)一般是用來初始化類成員等動態(tài)數(shù)據(jù)的,“類”應該還包含了靜態(tài)方法和實例方法,這些“方法”不屬于“構(gòu)造函數(shù)”的一部分,當然如果你使用動態(tài)聲明實例方法的寫法的話,那這些“方法”就確實屬于“構(gòu)造函數(shù)”的一部分了。
為了讓你覺得Object也是對象這件事情并不奇怪,請跟著我的思路走一遍
property)的都是對象class保留字聲明的類,你可以隨意添加屬性(property)(不信試試)property)(不信試試)Object中隨意添加屬性(property)(不信試試)這樣能明白些了嗎?
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。