编程语言分类
- 编程语言
- 面向对象 OOP java、javascript、php、c#(ASP.NET)、Python、GO、c++、Ruby ...
- 面向过程 POP c
- 标记语言:html、css
面向对象
- 面向对象编程「对象、类、实例」
- 对象:万物皆对象(泛指)
- 类:对对象的划分(按照其功能结构特点,划分出大类和小类)
- 实例:类中具体的事务
# 面向对象,类比举例
/*
1.自然界
道法归一:自然界本身就是面向对象构建出来的
所有需要研究和学习的(认知)的事物都是“对象”
分类:微生物类、植物类、动物类
...
动物类:低等动物 人类
人类: 男人类 女人类
每一个男人都是男人类的一个实例
实例和实例之间 具有私有的特征 也存在大量公共的特征
2.js
js本身就是基于面向对象思想开发出来的编程语言,所以我们学习和开发js的时候,也要按照面向对象的思想去处理!
「内置类」
每一种数据类型都一个自己所属的内置类:Number数字类(每一个数字/NaN/Infinity都是他的实例)、String、Boolean、Symbol、BigInt、Array、RegExp、Date、Function、Object...
每一种DOM元素也都有自己所属的类
window -> window -> windowProperties -> EventTarget -> Object
document -> HTMLDocument -> Document -> Node -> EventTarget -> Object
div -> HTMLDivElement -> HTMLElement -> Element -> Node -> ...
a -> -> HTMLAnchorElement -> HTMLElement -> Element -> Node -> ...
querselectorAll -> HTMLCollection/NodeList/CSSStyleDeclaration/DOMTokenList
...
学习数组 首先分析一个数组(实例),研究清楚这个实例的特征后(含:结构特点和常用方法等),我们再遇到其他的数组,直接也是按照相同的机制进行处理
「自定义类」
创建一个函数 fn
+ fn() 普通函数执行「堆栈机制」
+ new fn() 构造函数执行 「堆栈机制 + 面向对象机制」
*/
函数执行
普通函数执行
/**
* EC(G)
* vo
* Fn = 0x000;scopt:G
* result
*
*/
function Fn(x, y) {
/**
* EC(Fn) 0x000(10,20)
* ao:
* x = 10
* y = 20
* total = 30
* scope: Fn,G
* this: window
* param: x = 10,y=20
* run
* window.x = 10
* window.y = 20
* 没有返回值,默认返回undefined
*/
let total = x + y;
this.x = x; // window.x = 10
this.y = y; // window.y = 20
}
let result = Fn(10,20)
console.log(result)
/*
undefined
*/
构造函数执行
- new 函数():构造函数执行,它和普通的函数执行,还是有区别的
- 「相似」
- 一样是把函数执行(传递实参也是一样的)
- 形成私有上下文「按照步骤逐一处理」
- 也存在私有变量
- ...
- 「不同」
- new执行,浏览器会在当前上下文中,默认创建一个对象(实例对象)
- 在初始化this的时候,会让this指向这个实例对象
- 代码中编写 this.xxx = xxx 的操作,都是给实例对象设置私有属性
- 除了这些操作,其余的操作和实例对象没有直接关系
- 函数如果没有返回值,或者返回值是基本类型,则默认返回创建的实例对象; 如果自己返回的是引用类型值,以自己返回为主
- 「相似」
「新称呼」函数被称为类,返回
/**
* EC(G)
* vo
* Fn = 0x000;scopt:G
* result = 0x001
*/
function Fn(x, y) {
/**
* EC(Fn) 创建实例对象0x001 *区别1
* ao:
* x = 10
* y = 20
* total = 30
* scope: Fn,G
* this: 指向实例对象0x001 *区别2
* param: x = 10,y=20
* run
* window.x = 10
* window.y = 20
* 没有返回值,默认返回实例对象 0x001 *区别3
*/
let total = x + y; // total只是上下文中的私有变量,和实例对象没有直接关系
this.x = x; // 给实例对象设置私有的属性或方法
this.y = y; // window.y = 20
}
let result = new Fn(10, 20)
console.log(result)
/*
Fn { x: 10, y: 20 }
*/