前言:
都是些老生常淡的话题,有种初学不知曲中意,再学已是曲中人的凄凉之感油然而生,
也算是冷饭热嚼,本文内容大部分来源于javascript红宝书第三版。
面向对象的程序设计
前端到底是什么类型的,你看flutter 人家就是声明式 ,java 无可厚非就是面向对象,可javascript是个啥?
面向对象
ES5对象的定义:无序属性的集合,属性包含基本值 对象 或者函数,严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或者方法都包含一个名字,每个名字都映射一个值,我们可以把对象抽象成散列表,无非就一组键值对,其中值可以是数据或者函数
延伸:每个对象基于一个引用类型创建的,这个引用对象可以是原生类型(第五章),也可以是开发人员定义的类型。
1.1 创建对象方法:
创建一个object实例,然后点语法创建属性和方法
对象字面量语法创建 {}
以上两种创建结果一样
1.2 属性类型(数据属性、访问器属性)
引语:1. 这些特性是为了实现js引擎,js中不能直接访问。
2. 内部才用的特性
A 数据属性(只描述主要):
configurable:是否可编辑 是否能通过delete
emumerable 是否可枚举 是否可以被遍历value: 包含这个属性的数据值,此处是存储。这个特性默认值是undefined
writable: 是否能够修改属性值
修改属性默认的特性,必须使用方法Object.defineProperty()方法,调用此方法,如果不指定特性值,特性会默认为 false。特别注意特性 configurable
B 访问器属性
configurable:是否可编辑 是否能通过delete
emumerable 是否可枚举 是否可以被遍历get (可选 无则不可读 会读到 undefined)
set(可选 无则不能设置)
访问属性的特性(描述符)
Object.getOwnPropertyDescriptor
1.3 for in 循环
遍历对象的key
不适用遍历数组 因为遍历的结果为string
任何对象都继承Object,继承的类的属性默认不可遍历(但是这个值可以被修改 所以会被遍历到 所以要结合 hasOwnProperty 判断一下是否属于自身属性)
1.4 for of
遍历对象的value【需要结合Object.keys()】
可以遍历数组 字符串 正确响应break return