导图社区 javascript对象
javascript对象思维导图,包括对象属性、增强对象的语法、对象解构、创建对象、继承,类的定义、构成和本质等。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
对象、类与面向对象编程
理解对象
对象属性
数据属性
[[Configurable]] 表示属性时候可以通过delete删除并重新定义是否可以修改他的特性,默认情况下为true
[[Enuberable]] 表示是是否可以for-in循环返回,默认情况下为ture
[[Writable]] 表示是否可以修改属性值,默认情况下为ture
[[value]] 包含实际的值,默认情况为undefined
访问器属性
[[get]]
[[set]]
不可以像数据属性那样直接定义,必须用Object.defineProperty()
方法
Object.defineProperty(person, "name",{configurable:false, value:"haha"});
若三个值不指定,默认为false
Object.defineProperties();
Object.getOwnPropertyDescriptor() 可以取得指定属性的属性描述符返回值是一个对象
es8 Object.getOwnPropertyDescriptors()
es6 Object.assign()
Object.propertyIsEnumberable()
Object.hasOwnProperty()
Object.is({ }, { })
增强对象的语法
属性值简写
可计算属性
简写方法名
对象解构
概念
使用与对象匹配的结构来实现对象属性赋值
语法
let {name: Name, age: Age} = person
person对象的name和age属性复制在Name和Age上
( {name: Name, age: Age}) = person
嵌套结构
创建对象
工厂模式
function createPerson(name) {let o = new Object();o.name = name;return o;}
没有解决对象标识问题(即新创建的对象是什么类型)
构造函数模式
与工厂模式的区别:
没有显示的创建对象
属性和方法赋值给了this
没有return
这样创建的每个实例都有一个constructor指向构造函数
问题:
方法会在每个实例上都创建一遍
解决方法
函数定义转移到构造函数外部
原型模式
理解原型
只要创建一个函数,就会为这个函数创建一个prototype属性(指向原型对象)
原型对象自动获得一个constructor属性,指向构造函数
关键:
实例与构造函数原型有直接的关系,与构造函数没有
isPrototypeOf()
A.isPrototypeOf(B) 判断的是A对象是否存在于B对象的原型链之中
getPrototypeOf()
setPrototypeOf()
o.hasOwnPrototype()
hasPrototypeProperty(person,"name")若只存在原型上返回ture
Object.key()
Object.getOwnPropertyNames();
原型层级
要通过delete来删除对象的属性,才能保证这个属性不遮蔽原型属性
in操作符
问题
弱化了向构造函数传参的能力
共享特性
继承
原型链
基本思想
通过原型继承多个引用类型的属性和方法
A instancof B
如果a的原型链中出现过相应的构造函数则返回ture
原型实现继承时,原型实际上变成了另一个类型的实例
盗用构造函数
在子类构造函数中调用父类的构造函数
优点
传递参数
缺点
函数不能重用
组合继承
使用原型链继承原型上的属性和方法,通过经典继承继承实例属性
这样既可以把方法定义在原型上实现重用,又可以让每个实例都有自己的属性
会调用两次父类的构造函数
原型式继承
object函数将创建一个临时构造函数,讲传入的对象赋值给这个构造函数的原型,然后返回临时构造函数的一个实例
object.create()
场景
不需要单独创建构造函数,但仍需要在对象间共享信息的场所
引用值还是会共享,这和原型模式式一样的
寄生式继承
创建一个实现继承的函数,以某种方式增强对象,然后返回对象
关注对象,不在乎类型和构造函数
寄生式组合继承
不通过调用父类构造函数给子类原型赋值,通过取得一个副本。就是通过寄生式继承来继承父类原型
类
类定义
函数声明可以提升,类定义不可以
函数受函数作用域限制,类受块作用域限制
构成
构造函数方法
实例方法
获取函数
设置函数
静态类方法
与构造函数的区别
调用类构造函数必须用new
本质
一种特殊的函数
super注意事项
super只能在派生类构造函数和静态方法中使用
不能单独引用super关键字,要么调用构造函数,要么引用静态方法
调用super会调用父类构造函数,并将实例赋值给this
super行为如同调用构造函数,传参要手动传入
如果没有定义类构造函数,在实例化派生类时会调用super
不能在super前用this
显示定义了构造函数就必须要有super
[[HomeObject]]
Symbol.speries