面向过程
亲力亲为的去实现效果
特点:联系密切
面向对象
一种开发思想或者开发方式
宗旨:就是能找到一个能批量创建相似但是不一样的对象的机器
创建对象
字面量的方式创建对象
可以创建对象,但是创建出来的对象是相似但是不一样的,不能实现批量创建
内置构造函数的方式
可以创建对象,但是创建出来的对象是相似但是不一样的,不能实现批量创建
工厂函数的方式创建对象
语法:function fun (){}
事件:手动创建对象
手动添加成员
手动返回对象
内置构造函数方式创建对象
构造函数
new关键字连用的函数就称之为构造函数
内置构造函数的方式创建的内容
new Object(对象)
new Array(数组)
new String(字符串)
new RegExp(正则)
new Date(日期对象)
js自带的
自定义构造函数
和new关键字连用的函数称之为构造函数
详解自定义构造函数
自定义构造函数首字母大写,就是为了和普通函数区分
在自定义构造函数中不要书写return
如果返回的是一个基本数据类型,毫无意义
如果返回的是一个复杂数据类型,自定义构造函数没有意义
一定要和new关键字连用
只有连用时才有
自动创建一个空对象
this指向这个空对象
自动返回这个空对象
自定义构造函数的缺点
概念:
属性:我们把自定义构造函数内的值不是该函数得到叫做属性
方法:把值是函数的叫做方法
实例:把new出来的那个变量叫做实例
实例化:把创建实例的过程叫做实例化
不合理:
把方法定义在构造函数体体内,构成内存浪费
原型对象和对象原型
原型对象
原型对象就是函数天生自带的属性,是一个对象数据类型
即-->prototype
对象原型
是对象天生自带的一个属性,是一个非标准属性,不能用来赋值
作用:提供一个指向,指向所属构造函数的原型对象
即-->__proto__
对象的访问
对象的访问
当对象想要访问一个成员时(属性和方法)
首先在自己身上查找
有就使用,停止查找
没有就在所属构造函数的原型对象中去查找
注意:属性定义在构造函数体内,方法定义在原型对象上
自定义构造函数中的this
在构造函数体中this指向实例
在方法中this指向实例
总结:构造函数体内的this和原型方法中的this都指向实例
我们的方法就是供实例使用的
ES6中的类
就是使用ES6的语法书写自定义构造函数
如何定义一个类
使用的时候选哟new
万物皆对象
就是在js中一切数据类型都可以看作是对象数据类型
数组两层空间
一层数组空间。一层对象空间
函数两层空间
一层函数空间,一层对象空间
Object . prototype . toString . call()
原型链
概念:就是一个对象的访问机制
就是从任何一个数据出发,由__proto__串连起来的链状结构
当要访问一个成员的时候,首先在自己身上查找,如果有,就拿来使用停止查找
原型对象:事函数天生自带的属性,prototype,是一个对象数据类型
对象原型:是对象天生自带的一个属性,__proto__ 提供一个指向
任何一个纯粹的对象都是 Object 的实例
对象的访问
判断数据类型
typeof
只能检测基本数据类型
特殊的:null (返回值是object) undefined
可以检测函数
constructor
语法:数据类型 . constructor
返回值:就是对应的构造函数
注意:就是null和undefined不能判断
instanceof
语法:数据结构 . instanceof 构造函数
返回值:是一个布尔值
注意:null和undefined不能检测
object . prototype . toString . call()
任何数据类型都能检测
语法:object . prototype . toString . call(你要检测的数据类型)