慕容3067478
2019-03-18 17:19:56
本人在學習原型鏈的時候遇到一些困惑如下:在一些博客(比如阮一峰的博客中), 是這么說的: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, 學習了這些概念以后開始有點糊涂, 希望各位前輩能給出一個清晰的解答, 謝謝!
4 回答

阿晨1998
TA貢獻2037條經(jīng)驗 獲得超6個贊
然而“函數(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
也是對象這件事情并不奇怪,請跟著我的思路走一遍
在js里,能隨意添加屬性(
property
)的都是對象使用
class
保留字聲明的類,你可以隨意添加屬性(property
)(不信試試)你自己聲明的函數(shù),可以隨意添加屬性(
property
)(不信試試)你甚至可以向
Object
中隨意添加屬性(property
)(不信試試)
這樣能明白些了嗎?
添加回答
舉報
0/150
提交
取消