Javascript高级程序设计(第八章)对象、类与面向对象编程

理解对象

ECMA-262对象定义为一组属性的无序集合

1.属性的类型

类型:数据属性和访问器属性数据属性:
数据属性:
1.Configurable:表示属性是否可以通过delete删除并定义,是否可以修改它的特性,以及是否可以把它修改为访问器属性
2.Enumberable:表示属性是否可以通过for-in循环返回
3.Writable:表示属性的值是否可以被修改
4.Value:包含属性实际的值
访问器属性:
1.Configurable:表示属性是否可以通过delete删除并重新定义
2.Enumerable:表示属性是否可以通过for-in循环返回。
3.Get:获取函数,在读取属性时调用
4.Set:设置函数,在写入属性事调用

2.定义多个属性

Object.defineProperties()方法
Object.defineProperties(book,{
	year_:{
	value:2023
	},
	name_;{
	value:'shiren'
	get(){
	return this.name
	},
	set(newValue){
	return this.name = newValue
}
	},

3.读取属性的特性

Object.getOwnPropertyDescriptor()方法可以取得指定属性的属性描述符
如读取value、enumerable、get()、set()等

4.合并对象

	Object.assign()

5.对象标识符及相等判定

	ES6之前===操作符不严谨,如console.log(+0===-0) true
	ES6新增了Object.is()判断

6.增强的对象语法

	1.属性值简写
	2.可计算属性
	3.简写方法名

7.对象解构

let person = {
		name='shiren';
		age='26'
		job:{
			title:'happyNewYear'
		}let{name} = person
		//也可以定义默认值
		let { name,job='Soft engineer'} = person
		//嵌套解构
		let {job:{title}} =person
		//2.部分解构
		//开始赋值成功,后面的赋值出错,整个解构赋值智慧完成一部分
		//3.参考上下文匹配

创建对象

1.概述

	ES6正式支持类和继承

2.工厂模式

	工厂模式是一种设计模式
	必须有return o

3.构造函数模式

	没有return

4.原型模式

	每个函数都会创建一个prototype属性,这个属性是一个对象,包含应该由特定引用类型的实例共享的属性和方法

5.对象迭代

	Object.values(Object obj)返回为对象的值的数组
	Object.entries(Object obj)返回为对象的键值对的数组

继承

	通过原型链实现

1.原型链

	ECMA-262把原型链定义为ECMAScript的主要继承方式。
	基本思想:通过原型继承多个引用类型的属性和方法
	1.默认原型:任何函数的默认原型都是一个Object的实例
	2.原型与继承关系:可以通过instanceof操作符或者isPrototypeOf()方法
	3.关于方法:子类有时候需要覆盖父类的方法,或者增加父类没有的方法
	4.原型链的问题:原型包含的引用值会在所有实例间共享

2.盗用构造函数

	作用:为了解决原型包含引用值导致的继承问题
	方法:通过使用call()或apply()方法
	优点:可以传递参数
	问题:必须在构造函数中定义方法,因此函数不能重用

3.组合继承

	综合了原型链和盗用构造函数

4.原型式继承

	Object(Object obj)是传入的对象进行一次浅复制
	应用场景:在对象的基础上创建一个新对象
	ES5通过Object.create(Object obj,[option]】)方法将原型式继承的概念规范化了

5.寄生式继承

	思路:以某种方式增强对象,然后返回这个对象

6.寄生式组合继承

	基本思路:不通过调用父类构造函数给自雷原型赋值,而是取得父类原型的一个副本

1.类的定义

	两种方式:类声明和类表达式
	class Person{}
	const Animal = class {}

2.类构造函数

	constructor关键字用于在类定义块内部创建类的构造函数。
	方法名constructor会告诉解释器在使用new 操作符创建类的新实例时,应该调用这个函数
	new调用类会执行以下操作
	1.在内存中创建一个新对象
	2.在这个新对象内部的Prototype指针被赋值为构造函数的prototype属性
	3.构造函数内部的this被赋值为这个新对象
	4.执行构造函数内部的代码
	5.如果构造函数返回非空对象,则返回该对象

3.实例、原型和类成员

	实例成员:每次通过new调用类标识符时,都会执行类构造函数。在这个函数内部,可以为新创建的实例,添加自有的属性,在构造函数执行完毕后,仍然可以给实例继续添加新成员
	原型方法与访问器
	为了在实例间共享方法,类定义语法把在类块中定义的方法作为原型方法
	静态类方法在类中使用static关键字作为前缀。在静态成员中,this引用类自身。
	非函数原型和类成员,虽然累定义并不显式支持在原型或类上添加成员数据,但在类定义外部,可以手动添加
	迭代器与生成器方法,static *createJobIterator(){
		yield ‘Butcher’;
		yield "Baker“;
		yield ‘J-Dog’;

;}
迭代器
*Symbol.iterator{
yield * this.nicknames.entries();
}

4.继承

基础继承,使用extends关键字,就可以继承任何拥有Construct和原型的对象
派生类可以通过super关键字引用它们的原型。这个关键字智能在派生类中使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值