由一个问题引发关于对象和对象子类型的思考

简介: 由一个问题引发关于对象和对象子类型的思考

问题:

如题


var obj=new Object();
Object.prototype.toString.call(obj);// "[object Object]"
var arr=new Array();
Object.prototype.toString.call(arr);// "[object Array]"

如此类推,输出的"[object Object]"这些字符串,第一个object代表的是什么?第二个Object代表的又是什么?开头还是大写。


答案:

核心:对象对象子类型


先看一段MDN解释:


/

If this method is not overridden in a custom object, toString() returns "[object type]", where type is the object type.
var o = new Object();
o.toString(); // returns [object Object]

https://developer.mozilla.org...


第一个object代表custom object(对象)。

第二个Object代表type(对象子类型)。


那么问题来了,什么是custom object?


不严谨的说,Javascript中的所有,都是由custom object(对象)衍生出来的type(对象子类型).

JavaScript包括DOM,BOM和EcmaScript。
DOM的div,本质上也是一个custom object,type是HTMLDivElement。
BOM的navigator,本质上也是一个custom object,type是Navigator。
EcmaScript的arguments,本质上也是一个custom object,type是Arguments。


再说说常见的简单和复杂数据类型


/

String,Number,Boolean,null,undefined
Array,Object,Function,RegExp,Data,Math...

用toString()时,同样也会返回

[object String] [object Number] [object Boolean]......

不想写了,都一样,后面都是各自的type(对象子类型)。


至于为什么Object.prototype.toString.call("foo")同样会返回[obejct String],因为"foo"和String("foo")是等价的,注意,此处没有new。


这时候可能比较晕了,那么再来想想什么是简单数据类型,什么是复杂数据类型。

我的理解是,所有的数据类型都是由custom object(对象)衍生出来的,所以他们都是对type(对象子类型)。


只不过简单数据类型没有继承那些原型链上的方法,这样更加轻量;若继承的话,需要使用new操作符,就彻底成一个复杂数据类型了。


几乎所有的对象子类型都会继承Obejct,不过我想Object.create(null)是所有其他对象子类型的最原始状态


至于Object是怎么来的,我想这是个迷了,等后面我知道了再来补充答案

也不知道对不对,反正我把所有已知都联系起来了,轻喷

相关文章
|
存储 Cloud Native 编译器
C++ 对象生成:构造函数
C++ 对象生成:构造函数
|
2月前
|
搜索推荐
如何在构造函数中为类的实例添加方法?
在实际开发中,要根据具体的场景和需求来选择合适的方式来为类的实例添加方法,以确保代码的可读性、可维护性和性能。
|
8月前
|
C++
c++类&对象
c++类&对象
55 3
|
8月前
|
存储 Java 编译器
类、对象、方法
摘要: 本文介绍了面向对象编程的概念,以京东购买手机为例,展示了如何通过分类和参数选择商品,强调软件与现实生活的对应关系。柯南三步走揭示了京东如何通过搜索和筛选帮助用户找到所需商品,而这一切背后的编程思想即为面向对象编程。面向对象编程涉及抽象、自定义类型和实例化对象等步骤,其中自定义类型(如Java中的类)用于封装现实生活中的复杂数据。文章还讲解了如何定义类、实例化对象以及访问权限修饰符、构造方法、this关键字、方法的使用,强调了方法参数和返回值在不同数据类型上的处理差异。整个讨论旨在阐明Java中面向对象编程的基本原理和实践应用。
62 5
|
8月前
|
存储 C#
C#对象和类
C#对象和类
50 0
|
8月前
|
存储 C++
C++对象和类
C++对象和类
49 0
|
8月前
|
存储 算法 Java
第 4 章 对象与类(上)
第 4 章 对象与类
87 0
|
8月前
|
存储 Java 编译器
第 4 章 对象与类(下)
第 4 章 对象与类
147 0
|
存储 算法 C语言
27 C++ - 对象成员变量和函数的存储
27 C++ - 对象成员变量和函数的存储
47 0
|
编译器 C语言 C++
C++ 类 & 对象
【摘要】 C++ 类 & 对象C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。C++ 类定义定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是...