简述

对象,即我们相互交流的一个载体,有其属性和方法。对象是面向对象编程的核心,不仅用于JavaScript,而且还适用于Java、C语言、C++等。不再考虑单个变量和函数,而选择自给型的对象。

面向对象常用概念

  • 对象,属性,方法
  • 封装
  • 抽象
  • 复用/继承
  • 多态性
  • 关联
  • 聚合
  • 组合


关于对象的理解

用于描述JavaScript引用数据类型的统称、对于number boolean string 可以当作基本类型使用、但是他们也相应内置了包装类型、都有自己独立api方法。

Number对象
image.png

String对象
image.png

boolean对象**
image.png
所以在javascript世界里一切皆为对象。

关于function的理解

javascript中关于function可以说它是对象它又是函数 为什么出现这样情况呢?
这个要从历史说起 因为JavaScript这个语言刚刚出来的时候 没有把对象和方法做区分 或者说是一开始出来的时候
没有对象的概念 后期做了扩展

对象分类

  • JavaScript中对象分为内置对象和自定义对象
  • 内置对象 浏览器解析器为我们提供的对象
  • 自定义对象 我们自己定义的对象

内置对象

  1. Number 数子对象
  2. Boolean 布尔对象
  3. Object 定义对象object
  4. String 字符串对象
  5. Date 日期对象
  6. RegExp 正则对象
  7. Error 错误对象

**

自定义对象

  1. 第一种定义 new的方式定义
  2. var t = new Test()
  3. new t();
  4. 第二种定义 字面量定义
  5. var obj = {}

对象和函数的区分

  • 如果直接调用 person()它就是方式 它的this指向是window
  • 如果是new person()这种方式 它的this指向对象本身

函数例子

  1. function person(){
  2. console.log(this)
  3. }
  4. //调用
  5. person()
  6. //print
  7. Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}

对象例子

  1. function person(){
  2. console.log(this)
  3. }
  4. new person()
  5. person {}

Oject.prototype API

注:自定义对象或内置对象都会继承来自Object.prototype上的方法

  1. constructor
  2. hasOwnProperty
  3. isPrototypeOf
  4. toString
  5. valueOf
  6. propertyIsEnumerable
  7. Object.preventExtensions(obj) 让一个对象变的不可扩展,也就是永远不能再添加新的属性。
  8. Object.isExtensible(obj) 判断一个对象是否是可扩展的
  9. Object.seal(obj)让一个对象密封(只能读写 不能新增)
  10. Object.isSealed(obj)判断一个对象是否密封
  11. Object.frozen(arr) 让一个对象被冻结(只能读)
  12. Object.isFrozen(obj):判断一个对象是否被冻结
  13. Object.keys(obj) 返回一个由给定对象的所有可枚举自身属性的属性名组成的数组
  14. Object.getOwnPropertyNames(obj):返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组
  15. Object.is(value1, value2):判断两个值是否是同一个值。
  16. Object.create(proto [, propertiesObject ]) E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。
  17. Object.assign 把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
  18. Object.defineProperty() 定义单个对象属性或方法(可以设置读写可枚举)
  19. Object.defineProperties() 定义多个对象属性或方法(可以设置读写可枚举)