JS面向对象精要

JS面向对象精要

面向对象语言特性:封装、聚合、继承、多态

一、原始类型和引用类型

原始类型(数字、字符串、布尔值、数组、空、未定义):非对象,但拥有方法
·字面形式:不被保存在变量中的量,给原始类型赋值,二者并没有直接关联,因为其存储的地址不同

引用类型(对象)
·赋值实际上是给变量一个指针,指向内存中的同一个对象

内建类型实例化
JS中没有类,但有类似类的实例
如:Array数组 Date时间 Function函数-匿名函数-闭包
RegExp正则表达式

原始封装类型
实质:给其添加属性成为临时对象
eg,字符串 布尔值 数值

二、函数

函数可在对象中作为一个属性使用,函数即对象
注意:1.函数由声明和表达式组成,必须先定义函数才能使用函数
2.重载:声明多个同名函数时,只有最后一个定义有效(类似CSS层叠性)
this对象:当前调用函数内的对象(类似html中的相对引用)
改变this对象的方法:
1.call() 2.apply() 3.bind()

三、对象

属性(类似哈希表的键):put指定对象实例自身属性 set替换新属性 delete删除属性
属性类型:1.数据属性(value值 writable是否可以写入/布尔值) 2.访问器属性(不包含值,只定义了属性被读取时调动的函数 读取getter 写入setter)
属性特征:[enumerable] 是否可遍历[configurable]是否可配置
禁止修改对象:[extensible]:false

禁止扩展:无法给对象添加新属性
对象封印:不可扩展,不可配置属性
对象冻结:只读,无法解冻

四、构造函数和原型对象

构造函数:创造new对象时调用的函数
eg.function array object
注意:所有用同一个构造函数创建的对象都具有同样的属性和方法,所有的对象实例共享同一个方法

原型对象:对象的基础类型
prototype:原型对象属性
(无法删除一个对象的原型属性,也无法对一个对象的原型属性赋值)
1、在 JavaScript 中,每当定义一个对象(函数也是对象)时候,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象。
2、prototype 属性包含一个对象(以下简称"prototype对象"),所有实例对象需要共享的属性和方法,都放在这个对象里面;那些不需要共享的属性和方法,就放在构造函数里面。
3、实例对象一旦创建,将自动引用prototype对象的属性和方法。也就是说,实例对象的属性和方法,分成两种,一种是本地的,另一种是引用的。

继承
原型链:简单理解就是原型组成的链,由于__proto_是任何对象都有的属性,而js里万物皆对象,对象的__proto__是原型,而原型也是一个对象,也有__proto__属性,原型的__proto__又是原型的原型,就这样可以一直通过__proto__想上找,这就是原型链,当向上找找到Object的原型的时候,这条原型链就算到头了,并且最终值是null。
当js引擎查找对象的属性时,先查找对象本身是否存在该属性,如果不存在,会在原型链上查找,但不会查找自身的prototype。也就是说函数拥有 prototype 属性,但是函数自己不用它

五、对象模式

模块模式:IIFE 特权方法 执行后销毁 闭包函数
混入:一个对象在不改变原型对象链的情况下得到了另一个对象属性
作用域安全的构造函数作用域安全的构造函数@TOC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值