面向对象的JavaScript(2): 对象就是二元组

什么是对象?这里有很多关于对象的定义:

  • 对象(object)是一件事、一个实体、一个名词,是可以获得的东西,是可以想象的能够有自己标识的任何东西。
  • 对象是类的实例化。
  • 对象是一些相关的变量和方法的软件集合。

Java和C++里面的对象似乎都要使用class定义之后,然后在new出来一个。很简单,很明了。但是在JavaScript中,却并没有class这个定义。那么,JavaScript中就没有对象了吗?当然不是的!请看对象的定义,谁说对象就必须像Java或者C++一样定义呢?

先看一下Java中的定义:

C++中的?吭吭,那就看看吧:

大同小异不是?早就说过的……

那么,JavaScript的呢?大概也类似吧?

嗯,这不差不多嘛?嗯嗯,JavaScript是弱类型的,所以使用var声明变量,而不需要在声明时指定类型。然后,new操作符,创建一个……Object?这是什么?

在JavaScript的版本中,对象user并不是一个User类的实例!甚至,我们根本就没有定义一个类!按照Java的观点,Object是所有类的父类。我们创建的自己的user对象是一个Object类型的?然后,我们并没有声明name属性,怎么它就有了呢?

嗯,让我们换种写法试试:

 

这也行?晕死了!还有写法吗?嗯,看看这个:

唉,连那个可怜的Object都不见了,怎么就一个{}?不过,仔细看看,一个键,一个值,咋这么耳熟呢?这个写法像是……二元组?

没错,就是二元组!二元组是类似于<K, V>的东西,其中K代表键,V代表值。典型的二元组就是数组:K是int类型的,V是你定义的数组元素的类型。更普遍一些的就是散列,也就是数据结构中的哈希表(HashMap)。可以看出,散列实际上就是广义的数组,只不过它的索引index并不一定是int类型。

再来看看JavaScript中的对象定义:那不明显是二元组的定义吗?name : "User",就是K : V的形式。这样看来,JavaScript中的对象,就相当于是二元组!在JavaScript中,对象只是一组键值对(听上去耳熟?那不就是二元组的定义吗?),就是说,JavaScript中的对象可以看做以字符串为K的二元组(或许这个名字听起来很别扭,数学味道太浓了。那么,不妨就把它叫做散列,或者哈希表,或者是Python中的字典吧)。我们可以使用熟悉的"."(点运算符)或者[]运算符,来获取和设置对象的属性。这正是Python以及其他一些语言在处理字典数据结构时通常采用的方法。

还有一点,你一定已经注意到,JavaScript中对象的属性比Java和C++中更为灵活:你可以随意添加并不存在的属性!就像上面代码中的name!不过,如果你已经充分理解了JavaScript的对象就是二元组这个结论的话,这一点儿都不会让你感到惊讶。因为你就是在向二元组中添加新的元组嘛……添加一个新的键,以及这个键对应的值……嗯,这和Java中的HashMap的put(key, value)有什么区别吗?反正我看不出来……噢噢,除了语法上的区别……

嗯,这就是面向对象的JavaScript需要解决的第一个问题,什么是对象,怎样创建JavaScript的对象。已经和经典的面向对象语言有所不同了,不是吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值