简述
对象,即我们相互交流的一个载体,有其属性和方法。对象是面向对象编程的核心,不仅用于JavaScript,而且还适用于Java、C语言、C++等。不再考虑单个变量和函数,而选择自给型的对象。
面向对象常用概念
- 对象,属性,方法
- 类
- 封装
- 抽象
- 复用/继承
- 多态性
- 关联
- 聚合
- 组合
关于对象的理解
用于描述JavaScript引用数据类型的统称、对于number boolean string 可以当作基本类型使用、但是他们也相应内置了包装类型、都有自己独立api方法。
Number对象
String对象
boolean对象**
所以在javascript世界里一切皆为对象。
关于function的理解
javascript中关于function可以说它是对象它又是函数 为什么出现这样情况呢?
这个要从历史说起 因为JavaScript这个语言刚刚出来的时候 没有把对象和方法做区分 或者说是一开始出来的时候
没有对象的概念 后期做了扩展
对象分类
- JavaScript中对象分为内置对象和自定义对象
- 内置对象 浏览器解析器为我们提供的对象
- 自定义对象 我们自己定义的对象
内置对象
Number 数子对象
Boolean 布尔对象
Object 定义对象object
String 字符串对象
Date 日期对象
RegExp 正则对象
Error 错误对象
自定义对象
第一种定义 new的方式定义
var t = new Test()
new t();
第二种定义 字面量定义
var obj = {}
对象和函数的区分
- 如果直接调用 person()它就是方式 它的this指向是window
- 如果是new person()这种方式 它的this指向对象本身
函数例子
function person(){
console.log(this)
}
//调用
person()
Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
对象例子
function person(){
console.log(this)
}
new person()
person {}
Oject.prototype API
注:自定义对象或内置对象都会继承来自Object.prototype上的方法
constructor
hasOwnProperty
isPrototypeOf
toString
valueOf
propertyIsEnumerable
Object.preventExtensions(obj) 让一个对象变的不可扩展,也就是永远不能再添加新的属性。
Object.isExtensible(obj) 判断一个对象是否是可扩展的
Object.seal(obj)让一个对象密封(只能读写 不能新增)
Object.isSealed(obj)判断一个对象是否密封
Object.frozen(arr) 让一个对象被冻结(只能读)
Object.isFrozen(obj):判断一个对象是否被冻结
Object.keys(obj) 返回一个由给定对象的所有可枚举自身属性的属性名组成的数组
Object.getOwnPropertyNames(obj):返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组
Object.is(value1, value2):判断两个值是否是同一个值。
Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。
Object.assign 把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
Object.defineProperty() 定义单个对象属性或方法(可以设置读写可枚举)
Object.defineProperties() 定义多个对象属性或方法(可以设置读写可枚举)