javascript Object 是构造函数还是对象

发布于 2022-09-07 04:33:59 字数 816 浏览 18 评论 0

本人在学习原型链的时候遇到一些困惑如下:
在一些博客(比如阮一峰的博客中), 是这么说的:

JavaScript原生提供Object对象, 所有其他对象都继承自Object对象,即那些对象都是Object的实例

这里我就感到困惑了, 根据我的理解,Object难道不应该是一个构造函数么? 因为比如说任何一个实例对象都有.valueOf这个方法, 实际上是引用的Object.prototype这个原型对象里面的方法
而且当我在终端中输入typeof(Object)返回的是"function", 说明Object应该是一个构造函数, 真正的对象应该是Object.prototype

但是似乎又不完全是这样, Object有自己的静态方法, 就是直接定义在自身的方法, 比如Object.keys(), 所以说构造函数也是对象? 也是有可以有自己的方法和属性?

另外又做了一个测试:

var F = function() {}
F.__proto__ === Function.prototype // true

对于这个问题到底该如何理解, 本人刚刚学习javascript, 学习了这些概念以后开始有点糊涂, 希望各位前辈能给出一个清晰的解答, 谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

女尤 2022-09-14 04:33:59

然而“函数”也是Object

function rua() {}

console.log(rua instanceof Object)

// true

甚至“类”也是Object

class Rua {}

console.log(Rua instanceof Object)
// true

在js里,一个类同时也是一个对象

在js里,万物皆Object(除了基本类型),仔细想想,这并没有任何冲突,这也使得js非常的灵活。

另外为什么你会觉得一个类会(只)是一个“函数”?构造函数一般是用来初始化类成员等动态数据的,“类”应该还包含了静态方法和实例方法,这些“方法”不属于“构造函数”的一部分,当然如果你使用动态声明实例方法的写法的话,那这些“方法”就确实属于“构造函数”的一部分了。

为了让你觉得Object也是对象这件事情并不奇怪,请跟着我的思路走一遍

  1. 在js里,能随意添加属性(property)的都是对象
  2. 使用class保留字声明的类,你可以随意添加属性(property)(不信试试)
  3. 你自己声明的函数,可以随意添加属性(property)(不信试试)
  4. 你甚至可以向Object中随意添加属性(property)(不信试试)

这样能明白些了吗?

怪我闹别瞎闹 2022-09-14 04:33:59

函数本身就是对象,有关原型,原型链的可以参考prototype

玩套路吗 2022-09-14 04:33:59

Js里什么都能当成对象,Object自然能当成构造函数,但他也是对象,函数本身就是对象

冷心人i 2022-09-14 04:33:59

JavaScript 中的对象类型和其他数据类型有着本质区别,万物皆对象是有道理的。

橘和柠 2022-09-14 04:33:59

你说的原型是函数的属性,而函数本身又是对象,简单的来说一切皆为对象。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文