一、对象类型的使用
- 认识对象类型
- 对象类型是一种存储键值对的更复杂的数据类型
- 键值对可以是属性和方法
函数(function):如果JavaScript代码中通过function默认定义一个结构,称之为函数方法(method):如果将一个函数放到对象中,作为对象的一个属性,那么将这个函数称之为方法 - key可以是字符串
- value可以是任意类型,包括基本数据类型、函数类型、对象类型
- 创建对象
- 对象字面量:通过{}
- new Object+动态添加属性
- new其他类
- 使用对象
- 访问、修改、添加、删除(delete)
- key值若为变量可以使用[]方括号使其在定义和操作属性时更灵活
- 对象的遍历
- Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组
- 遍历方式一:普通for循环
var infoKeys = Object.keys(info) for (var i = 0; i < infoKeys.length; i++) { var key = infoKeys[i] var value = info[key] console.log(`key:${key},value:${value}`) }- 遍历方式二:for in遍历方法
for (var key in info) { var value = info[key] console.log(`key:${key},value:${value}`) }
二、值类型和引用类型
-
堆内存和栈内存
- 原始类型占据的空间是在栈内存中分配的
- 对象类型占据的空间是在堆内存中分配的
-
值类型和引用类型
- 原始类型在变量中保存的是值本身,所以也叫值类型
- 对象类型在变量中保存的是对象的“引用”,所以也称之为引用类型
三、函数的this指向
- 如果普通的函数被默认调用,那么this指向的就是window
- 如果函数它是被某一个对象来引用并且调用它,那么this会指向这个对象
四、工厂方法创建对象
- 创建对象的方式:工厂函数(封装一个函数用于创建一个对象,我们只需重复调用这个函数即可)
function createPerson(name, age, height, address) { var p = new Object() p.name = name p.age = age p.height = height p.running = function() { console.log(this.name + "running~") } } var p1 = createPerson("张三", 18, 1.88, "杭州") var p2 = createPerson("李四", 18, 1.88, "宁波") var p3 = createPerson("王武", 18, 1.88, "温州")
五、构造函数和类
- 认识构造函数
- 构造函数也称之为构造器,通常是我们在创建对象时会调用的函数
- 在JavaScript中,构造函数就是类的扮演者
- 在ES5之前,我们都是通过function来声明一个构造函数(类)的,之后通过new关键字来对其进行调用
- 在ES6之后,JavaScript可以像别的语言一样,通过class来声明一个类
- 类
- JavaScript中类的表示形式就是构造函数
- 构造函数也是一个普通的函数,如果这个普通函数被new操作符来调用了,那么这个函数就称之为构造函数
六、new创建对象
- 如果一个函数被使用new操作符调用了,那么它会执行如下操作
- 在内存中创建一个新的对象(空对象)
- 这个对象内部的[[prototype]]属性会被赋值给该构造函数的prototype
- 构造函数内部的this,会指向创建出来的新对象
- 执行函数体代码
- 如果构造函数没有返回空对象,则返回创建出来的新对象