JavaScript高级 创建对象的四种方式:
①直接创建法:
例:创建一个学生对象:名称,年龄 方法:吃饭
产生10个学生对象 用 js直接创建
好处:创建简单 弊端:无法量产
----------------------------------------------------------------------------------------------------------------------
②工厂模式 创建:
要求、重复的创建对象,需要创建时可以快速的创建出来
将创建对象的过程 封装到函数内部,直接调用函数进行对象创建
工厂模式:通过函数来创建对象
好处:可以量产对象
弊端:无法明确对象的类型,全都是object类型的,无法类型的细分
instanceof 检测变量的数据类型 ,对应变量必须为原型创建出来的
js中分为两种数据类型 :简单数据类型:简单数据类型在直接创建时 不走原型 复杂类型 instanceof
变量 instanceof 类型 返回布尔值
typeof 返回对应变量的数据类型 返回根本数据类型 字符串
var arr=[1,2,3]
//arr变量 检测arr变量是否为数组类型
console.log(typeof(arr)) //object
console.log(typeof(arr)==”object”) //true
//变量 instanceof 类型 返回布尔值
console.log(arr instanceof Array)//true
注:
var num=10 不是原型
var num=new Number(10) 原型
console.log(num instanceof Number) 如果是原型就为真 true 如果不是则为false
----------------------------------------------------------------------------------------------------------------------
③构造函数:
其他的编程语言当中,想要创建对象的话,创建一个类
类:一类事物的统称 包含 属性和方法
Js中没有类概念
构造函数的方式来模拟类!!!利用js this 指向性可以改变的问题
创建一个学生类(构造函数) name,age,egt方法
this指向 对象 window 固定对象 事件源
this指向运行环境 //window对象
function fun(){
console.log(this)//window
}
fun()
构造函数创建对象
好处:可以明确对应的对象类型
弊端:不同对象中的相同方法,无法公用,需要独立存储,造成内存损耗
然后 通过new来创建对象 new做了什么?
***重点
- 创建一个空对象{}
- 在执行函数的过程中,函数内部this指向创建出来的{} this={} {name:"王一",age:21,eat:function(){}}
- 将创建对象 返回出来,赋值给前方变量
***
可以判断是否为学生类型的对象
Prototype属性 :原型对象
想办法将 公有的方法或者属性 放到原型中呢
通过同一个构造函数创建出来的对象原型是相等的
对象的原型__proto__
console.log(s1.__proto__==s2.__proto__)
----------------------------------------------------------------------------------------------------------------------
④原型创建:
构造函数创建对象时共有的方法,没办法统一存储,需要独立开辟空间造成内存消耗
发现 每一类相同的对象,原型对象都是一个样,想办法将公有的方法 放到原型中
创建一个学生构造函数 name,age,eat公有方法
构造函数原型==实例化对象的原型
将共有的方法放入构造函数的原型中 如下图:
2022-04-09/23:00