1.基础
Js对象:
本质上都是通过new函数创建的,包括对象字面量的形式定义对象(相当于new Object()的语法糖)
Js函数:
本质上都是通过new Function创建的,包括Object、Array等
Js所有的函数都是对象
2.概念
2.1类:是创建对象实例的模板
本质上讲类是个函数 (例如Array object String )
2.2构造函数:
是什么:函数
用new来执行的函数
一种特殊的函数,主要用来初始化对象
作用:封装
把对象里面一些相同的属性和方法抽象出来封装到函数里面
功能:主要用于在类的对象创建时定义初始化的状态
调用:new 构造函数名();
语法格式:
注意点:
- 构造函数名字首字母要大写
- 构造函数名字不需要return就可以返回结果
- 调用构造函数必须使用new
- 只要new xxx( )调用函数就创建一个对象{ }
- 属性和方法前面必须加this
方法调用示例:
构造函数和对象的区别:
- 构造函数实际上是一个泛类,对象是一个具体的事物(泛类表示类中有一个未知的类型)
- 我们利用构造函数创建对象的过程也称为对象的实例化,即实例对象
构造函数和函数的区别:
唯一不同就是调用它们的方式不同
- new调用:this指向对象
- 不用new调用:this指向window
new关键字的执行过程
- new关键字可以在内存中创建了一个空的新对象
- this就会指向刚才创建的空对象
- 执行构造函数里面的代码,给这个空对象添加属性和方法
- 返回这个对象
遍历对象属性for…in…
可用于对数组或者对象的属性进行循环操作
缺点
浪费内存
构造函数中的函数多次创建,占用内存
2.3实例对象
是什么
- 通过构造函数使用 new 关键字创建的对象
- 由类创建的对象
- 本质上就是对象
作用
这个新对象就会从构造函数的原型对象中继承属性和方法
形式
var car1=new Car("red","BMW")car1就是实例对象
vue实例
类似于创建一个对象,是一个vue构造函数的实例对象。里面包含钩子函数data、methods、components等
Js实例
js中所有对象都是Object的实例
因为Object是一个基本对象类型,其它所有对象都从object继承了基本的行为
js中所有函数都是Function的实例(包含内置构造函数)
Object、Array、Date、Function、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError、Boolean、Number、String都是内置构造函数
Object是内置的构造函数,用于创建普通对象
- Object.keys():获取对象中所有属性(键)
- Object.value(): 获取对象中所有属性(值)
- Object.assign():用于对象拷贝
内置构造函数
含义:
- 内置(就是js本身就自带)
- 构造函数(本质上就是一个函数,构造函数就是用来创建对象的)
- 内置构造函数(js内部提供了一个用来创建对象的函数)
如何通过内置构造函数创建对象
let 对象名=new Object();
分类
- 引用:Object Array RegExp Date等
- 包装:String Number Boolean等
js中所有手动创建的对象都是对应类型的实例,同样也是Object的实例
如何检测
instanceof操作符
- 该操作符能确定左侧的对象是否是右侧类的实例,返回一个Boolean值
- 若检测基本类型则返回false,因为基本类型不是对象
2.4原型对象
JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象,所以我们也称为原型对象
作用
原型对象可以挂载函数,对象实例化不会多次创建原型对象里面的函数,节约内存
3.原型
3.1类别
显示原型prototype
- 一个普通的Object对象
- 实例的原型
- 每一个类(构造函数)都有一个显示原型prototype
隐式原型_proto_
js所有实例对象(除了null)都具有的一个属性
[[prototype]]就是_proto_
实例对象的_proto_属性指向了构造函数的原型
f.__proto __ =Fo.prototype
3.2constructor属性
constructor属性在哪
每个原型对象中都有constructor属性
由原型对象指向构造函数的一个Js属性
Fo.prototype.constructor–>Fo
经常用它给构造函数追加属性和方法
4.原型链
4.1概念
- ①当访问一个对象成员(属性/方法)时,首先查找这个对象自身有没有该成员(属性/方法)
- ②如果没有就查找它的原型对象(也就是_proto_指向的prototype原型对象)
- ③如果还没有就查找原型对象的原型对象(Object的原型对象)
- ④依此类推一直找到Object为止( null )
- ⑤原型链就在于为对象
4.2图解
5.作用
- 实现了Js的继承
-
- class的extends方法
-
- 继承原型链
- 实现了实例的公用属性和方法( 实现类的实例方法扩展)
6.三张图了解原型和原型链
题外话
hasOwnProperty
hasOwnProperty 用来判断是否是对象自身的属性(非原型链继承过来的
in
in用来检查对象是是否包含某个属性(包含原型链上的属性)