Day09_JavaScript课堂笔记

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 创建对象的同时指定原型

// 创建对象并将原型指向对象a
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 不可变类型和可变类型

不可变类型: 原始类型、值类型也称为不可变类型。数据是一个整体,无法修改其中的一部分。

可变类型: 对象类型、引用类型也称为可变类型。数据是一个集合,可以修改其中的一部分。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生本该如此

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值