面向对象
对象:万物皆对象 「研究/使用对象」
类:把万事万物按照特征进行分类「大类、小类」
动物类
哺乳动物类
.....
两栖动物类
.....
微生物类
植物类
....
实例:人类 -> 每个人就是人类的一个实例
面向对象是一种非常方便的、强大的,用来构建和管理整个知识体系的思想
具象化OOP
- 类
- 实例
- 每个实例都有自己私有的属性和方法【私有化】
- 每个实例也都具备类赋予他们的公共属性和方法
JS内置类
JS语言本身就是基于类和实例构建和组成的 ==> 内置类
- 每种数据类型都有自己所属的内置类【也叫构造函数】
-
- 大类有:Object(每一个对象都是Object类的实例)
- 小类有:Number (每一个number类型的值都是这个类的一个实例)、String Boolean、Symbol、Array、Regex、Date、Error、Function...
- 每一个HTML标签(或者每一个DOM节点)都有自己所属的内置类
-
- div元素对象 -> HTMLDivElement -> HTMLElement -> Element -> Node -> EventTarget -> Object
[每一个元素标签对象基本都有自己所属的类]
自定义构造函数(类)
通过new来构造的
创建一个函数,执行的时候,把其“new”执行,则当前函数被称为“自定义构造函数(类)”;执行的返回结果一般是当前类的一个“实例”;
“new”多次会创造多个不同的实例对象「实例对象的独立性」;基于this.xxx=xxx是给实例对象设置“私有属性方法”;
实例分析
function Fn(x,y){
let sum = 10;
this.total = x+y;
this.say = function(){
console.log(`我计算的和是:${this.total}`)
}
}
let res = Fn(10,20);//普通函数执行
let f1 = new Fn(10,20);//构造函数执行
let res = Fn(10,20);//普通函数执行, Fn执行的返回值赋值给res
let f1 = new Fn(10,20);//构造函数执行, 把Fn当做一个类,f1是创造出来的一个实例
画图分析
构造函数执行,其中大部分操作和普通函数一样,只有以下几个区别:
- 初始化作用域链之前,浏览器会默认创建一个对象(空对象,是Fn类的实例对象)
- 初始this的时候,会让this指向这个实例对象,如:
let f1 = new Fn(10,20);this指向f1 - 在代码执行完,看函数本身的返回结果,
-
- 返回到是对象,则以自己返回的为主。如:
function Fn(){
return {a:1}
}
let f1 = new Fn();
//f1就是{a:1}
-
-
不写返回值或者返回的是个原始值,则浏览器默认会把创建的实例对象返回。
-
new Fn(10,20)和new Fn的异同点:
相同:都会执行Fn
区别:
-
new Fn(10,20)传递了实参,new Fn相当于new Fn()不传递实参new Fn(10,20)优先级高于new Fn