JavaScript 面向对象(一)认识对象

1.对象

1. 1 认识对象

对象在JS中有狭义对象、广义对象两种。

1.1.1 狭义对象

所谓狭义对象,就是用 {} 这种字面量形式定义的对象,它是一组属性的无序集合:


上面这个对象,表示一个“人”,里面有四个属性,换句话说,这个对象里面除了4个属性,别的什么都没有。

所以我们想一想,所谓的对象到底是什么?表达的哲学又是什么?

比如我们现在不用对象,而用一组数组来存储一组值:


数组只能存储值,不能存储键,换句话说,数组里面的值的“语义”不详。对象除了能存储值,还能存储值的“语义”。值的“语义”,叫做keys——键。

也就是说,对象就是一组值和值的“语义”的封装。


1.1.2 广义对象

广义对象也是对象,但你感觉它除了一组属性还有别的东西。

比如DOM元素是对象,但是和我们刚才说的“里面只有一组值,别的什么都没有”不同。


我们通过DOM方法得到了一个DOM对象,此时可以通过 语法 来给这个对象添加name、age、sex、hobby属性。此时可以通过o.sex访问它的sex属性,此时,你不能说这个对象只有name、age、sex、hobby这四个属性,别的什么都没有!因为这个o毕竟有一个HTML标签实体在页面上。


再来看数组,数组也是对象:


我们也可以通过点语法,给数组添加属性:


说明数组有对象的一切特征,就是能够添加属性,但是你不能说这个数组此时只有name、age、sex、hobby这四个属性,别的什么都没有,毕竟它有一组数!


再来看函数,函数也是对象,但是用 typeof 运算符检测类型,返回的结果是 function,不是 object,这是系统规定,但是function 也是object,这个问题会在之后讨论。


此时我们要证明这个fun也是一个对象,怎么证明,给它加属性!如果能加上属性就说明是对象:


此时对象添加属性成功,但是你不能说fun对象只有xingming、age、sex、hobby这四个属性,别的什么都没有,因为毕竟它是一个函数,可以加圆括号 ( ) 执行!


再比如正则表达式,也是一个对象:


添加属性成功,但是你不能说只有这些属性,毕竟它是一个正则!


也就是说,系统内置的所有引用类型值,都是对象,它们都能添加自定义属性,并且能够访问这些属性:

  • function   函数
  • array   数组
  • regexp   正则表达式
  • DOM   元素
  • window、document、Date 、Math
  • Number、String内置包装构造函数得到的值

但是这些对象除了一组属性之外,还有其他的东西。比如数组还有一组值;比如函数还有一组语句,能够圆括号执行。


什么不是对象?就是系统的基本类型值:

数字不能加属性,因为数字是基本类型值,不是对象:



字符串不能加属性,因为字符串是基本类型值,不是对象:



要记住,除了系统能够送给我们的“除了属性还有别的东西的”对象,我们自己是不能创建这种东西的。也就是说,对于开发者而言,我们只能创建狭义对象。


那到底有什么性质,我们就称为它是对象呢?能够添加属性!特别的,微观层面,只要这个东西存放在堆内存中就可以认为是一个对象。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值