在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  網(wǎng)絡安全  HTML/ javascript Object 是構(gòu)造函數(shù)還是對象

javascript Object 是構(gòu)造函數(shù)還是對象

本人在學習原型鏈的時候遇到一些困惑如下:
在一些博客(比如阮一峰的博客中), 是這么說的:

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, 學習了這些概念以后開始有點糊涂, 希望各位前輩能給出一個清晰的解答, 謝謝!

回答
編輯回答
莓森

JavaScript 中的對象類型和其他數(shù)據(jù)類型有著本質(zhì)區(qū)別,萬物皆對象是有道理的。

2018年4月16日 05:53
編輯回答
大濕胸

Js里什么都能當成對象,Object自然能當成構(gòu)造函數(shù),但他也是對象,函數(shù)本身就是對象

2018年4月27日 13:52
編輯回答
瘋子范

函數(shù)本身就是對象,有關(guān)原型,原型鏈的可以參考prototype

2017年7月21日 07:58
編輯回答
巫婆

然而“函數(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也是對象這件事情并不奇怪,請跟著我的思路走一遍

  1. 在js里,能隨意添加屬性(property)的都是對象
  2. 使用class保留字聲明的類,你可以隨意添加屬性(property)(不信試試)
  3. 你自己聲明的函數(shù),可以隨意添加屬性(property)(不信試試)
  4. 你甚至可以向Object中隨意添加屬性(property)(不信試試)

這樣能明白些了嗎?

2017年3月16日 05:20