在编程语言中,”对象Object“概念的引入原因、描述和创建

169 阅读5分钟

1、编程语言中为什么要引入“对象”这个概念?

举一个现实中的小例子,你去一家公司应聘找工作,hr给你一张空白纸让你写一下自己的个人信息介绍,然后你把一张这样的个人信息介绍纸拿给了hr看:

简历.jpg

然后hr看了后说:一个连个人信息介绍都写不好的人,怎么让我相信你有能力把工作做好呢?你不符合我们公司的招聘要求,你走吧!

然后你失望的离开了这家公司,你开始总结失败的面试教训,鼓起勇气又去另一家同类型的公司应聘找工作。

另一家公司的HR同样给你一张空白的纸让你写一下自己的个人信息介绍,然后你自信的把自己写的个人信息介绍拿给了HR看:

监理.jpg

然后HR看了后给你安排了面试官面试你。

类似的公司、同样的个人信息介绍内容,为什么HR面对求职者的态度会是截然相反呢?因为“有规则地组合在一起的信息是有价值的”;如果信息无规则地组合在一起,无论数据量多么的巨大都是没有价值的;对于有价值的东西人类要把它存储起来以便更好的利用。

编程本质上是对现实世界的描述。那么在编程的世界里是如何描述求职者的个人信息介绍的呢?

在编程里,姓名、性别、年龄等这些项被叫做属性(专业术语也叫“键”),独立开发者刘学生、男、28岁等这些项被叫做属性值(专业术语也叫“值”),单个属性和单个属性值组合在一起叫做“键值对”,多组“键值对”组合在一起叫做“对象”。

为了能够用编程的方式来描述多组键值对的集合,所以引入了“对象”的概念;或者说,“对象”的概念就是为了在编程中用来描述现实世界里多组键值对集合的信息。

2、各种高级编程语言(以下都以JavaScript为例)是如何描述对象这个概念呢?

日常工作中我只使用过JavaScript这一种高级编程语言,所以以这门编程语言为例来说明问题;其他的高级编程语言也大多都有“对象”这个概念,描述方式也是大同小异。

JavaScript中对象的描述方式:

{
    "姓名""独立开发者刘学生""年龄"28,
    "性别""男""身高""178cm""体重""75kg""民族""汉""爱好""打球、跑步",
}

"姓名":"独立开发者刘学生" :单组键值对中用冒号“:”分隔属性和属性值;属性的类型只能是字符串格式,用单引号“ ' ' ”或者双引号“ " " ”包裹,也可以省略引号,通常使用英文编写;属性值可以是任何格式的数据类型。 多组键值对之间用逗号“,”分隔,所有的键值对必须包裹在花括号“{ }”中。

3、JavaScript中如何创建对象呢?

1. Object.create(null/对象,propertiesObject):通过现有对象为原型来创建一个新对象;

create2.png

可以看到这个对象中没有任何数据,是一个空对象; 我们试着往对象中添加一组键值对数据:

name.png

这个时候可以看到obj1和我前面说到的对象概念就比较接近了,只不过只有一组键值对,我们继续添加几组键值对再看看:

sex.png 现在obj1就和“对象”完全一样了。

现在我又有一个需求:我想创建一个和obj1拥有同样键值对的对象obj2,但是我又不想像obj1一样麻烦的重复的添加键值对,那我怎么办呢?

==.png

这时,obj1和obj2是拥有相同键值对集合对象,并且内存彼此独立;

obj1===obj2 //false 不全等,说明两个变量是内存彼此独立的对象

let objStr1=JSON.stringify(obj1);let objStr2=JSON.stringify(obj2);
objStr1===objStr1 //true 说明内部包含的键值对是相同的;

obj2其实是以obj1为原型继承了obj1的所有属性,可以打印看一下:

原型.png

2.let obj = new Object(arg):通过内置专门用于创建对象的构造函数Object()创建对象实例,这种"new 构造函数()"是一种符合主流标准规范的创建对象的方式,也适用于非内置的构造函数;

Object.create(null/对象,propertiesObject)也只不过是在Object()构造函数基础之上封装实现的一个用于创建对象实例的静态方法;Object()在JavaScript中是一个非常重要且特别的存在,后边我会花大量的篇幅去详细梳理这一块的内容,这里先不细说。

arg为空、undefined或null时,会返回以Object.prototype为原型的一个空对象; arg为一个对象时,会直接返回这个arg对象; arg为字符串、数字、布尔值、数组,会创建相应类型的包装对象;

关键字new也可以省略,只写Object();如果不传参数的话括号也可以省略,只写Object;效果都是一样的;

3.花括号{ }简洁创建对象方式:把键值对包裹在花括号里,new Object(arg)的一种简写方式,本质还是new Object(arg);