JS之面向对象

87 阅读2分钟

面向对象

对象:万物皆对象  「研究/使用对象」

:把万事万物按照特征进行分类「大类、小类」

    动物类

        哺乳动物类

             .....

        两栖动物类

        .....

    微生物类

    植物类

    ....

实例:人类 -> 每个人就是人类的一个实例

面向对象是一种非常方便的、强大的,用来构建和管理整个知识体系的思想

具象化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是创造出来的一个实例

画图分析

构造函数执行,其中大部分操作和普通函数一样,只有以下几个区别:

  1. 初始化作用域链之前,浏览器会默认创建一个对象(空对象,是Fn类的实例对象)
  2. 初始this的时候,会让this指向这个实例对象,如:let f1 = new Fn(10,20); this指向f1
  3. 在代码执行完,看函数本身的返回结果,
    • 返回到是对象,则以自己返回的为主。如:
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