Day09 JavaScript 笔记
1 回顾
1.1 构造函数
1. 构造函数的概念
2. 构造函数和对象的关系
构造函数是对象的描述,对象是构造函数的实例
3. 判断对象是否是构造函数的实例
运算符 instanceof
属性 constructor
4. 自定义构造函数
5. 实例化构造函数 new
6. 原始类型数据的对象特性
Number、String、Boolean
var num = 100;
100.constructor;
/*
var obj = new Number();
obj.constructor;
销毁 obj
*/
1.2 this 的指向
1. this 的概念
this 是系统定义好的变量,值设置好的
一般在函数中使用
2. this 的指向
构造函数中: this的值是构造出来的实例
函数中: 谁调用该函数,this指向谁
3. window
① window 是全局对象
② 所有的全局变量就是window的属性
③ 使用window的属性或方法可以省略window
2 原型
2.1 原型的概念
1. 每个对象都有一个原型,原型也是一个对象。
2. 对象可以使用原型上的属性和方法。(继承)
2.2 如何获取对象的原型
① 通过对象本身直接获取
对象.__proto__
② 通过对象的构造函数获取
对象的构造函数.prototype
2.3 对象、构造函数、原型之间的关系
① 对象和构造函数
1. 对象是构造函数的实例,构造函数是对象的描述。
2. 一个构造函数可以对应多个对象,一个对象只有一个构造函数。
② 对象和原型
1. 对象可以继承原型上的属性和方法。
2. 一个对象只能有一个原型,多个对象的可以指向同一个原型。
③ 构造函数和原型
1. 通过构造函数的prototype属性可以获取到对象的原型。
2. 对象构造函数相同,原型也相同。
2.4 自定义构造函数时原型的应用
function User(name, address) {
this.name = name;
this.address = address;
}
User.prototype.addShopcart = function() {
console.log(this.name + '将商品加入购物车!');
};
User.prototype.buy = function() {
console.log(this.name + '购买了商品,请邮寄到' + this.address);
};
2.5 判断属性是否属于对象本身
对象.hasOwnProperty('属性名');
方法返回布尔值,只有要判断的属性是对象本身所具有的才返回true,其他(在原型上或者不存在)返回 false
2.6 创建对象的同时指定原型
Object.create(对象a)
Object.create(null);
3 原型链
3.1 原型链的概念
1. 对象的原型还是对象,原型也有原型,构成了原型链。
2. 原型链最终到达一个顶层原型对象(顶层原型对象是一个没有原型的对象)。
3.2 属性查找过程
1. 当使用对象中某个属性的时候,先从对象本查找,如果有就使用,没有继续从对象的原型上查找
2. 沿着原型链向上查找,从哪里找到在哪里停止,一直到顶层原型对象
3. 如果原型链上没有该属性,自动得到 undefined
3.3 构造函数和原型链
1. 默认情况下,所有对象的原型链的顶层,都是 Object.prototype
2、 Array.prototype、Function.prototype、Number.prototype、String.prototype、Boolean.prototype、自定义构造函数.prototype 都是 Object 的实例
3、函数类型的对象既有 __proto__ 属性,又有 prototype 属性; 其他类型的对象只有 __proto__ 属性。
函数.__proto__ 指向自己的原型; 函数.protptype 指向实例的原型。
4、Function 是一个特殊的存在, Function 的构造函数是 Function 本身
Function.__proto__ === Function.prototype
函数.__proto__ 称为函数的隐式原型,表示自己的原型。
函数.prototype 称为函数的显示原型,表示实例的原型。
4 值类型和引用类型
4.1 值类型和引用类型的概念
值类型: 原始类型的数据,也叫值类型。
引用类型: 对象类型的数据,也叫引用类型。
4.2 值类型和引用类型的存储方式
值类型: 数据可以直接存储在栈结构中。
引用类型: 栈结构存储的是地址,堆结构中存储的是数据。
值传递: 变量a赋值给变量b,如果传递的是值(数据),称为值传递。
引用传递: 变量a赋值给变量b,如果传递的是地址(引用),称为引用传递。
值传递和引用传递场景: ① 变量赋值; ② 实参给形参赋值
4.3 不可变类型和可变类型
不可变类型: 原始类型、值类型也称为不可变类型。数据是一个整体,无法修改其中的一部分。
可变类型: 对象类型、引用类型也称为可变类型。数据是一个集合,可以修改其中的一部分。
|