JavaScript 面向对象的理解
什么是面向对象
可以简单的认为,我们处在上帝视角,我们是上帝,我们要创造人类,动物类,植物类,鱼类,天气类等等的事情。
我们创造的"人类"就属于"类",某个具体的人,比如"张三",他就属于具体的人,也叫实例,这种使用归类的形容和处理问题的思路就叫面向对象。
我们如果用心留意,会发现很多语言,喜欢第一件事情输出"hello world",因为这种行为象征着开发者创造了一个全新的东西,这个东西可以向世界打招呼,那么此时的开发者是不是就像造物主一样的存在?
面向对象的核心,就是掌握 实例
/ 类
/ 对象
生活中的理解
- 实例:类中具体的事物,单个个体;
- 张三,李四,
- 松树 A,松树 B
- 公鸡 A, 公鸡 B, 公鸡 C
- 类:某些相同特征的个体归类
- 人类
- 动物类
- 植物类
- 对象:所有的类都是属于对象
- 万物皆对象,JS 世界的基础
注意:众多相同特征的实例
,组成类
,众多类和实例组成对象
的概念。
JS 世界中的理解
let ary1= [];
let ary2= [];
let str1= "";
let str2= "";
ary1
和ary2
都是实例,他们都属于Array
类(注意 Array,首字母大写)str1
和str2
都是实例,他们都属于String
类(注意 String,首字母大写)
下图是 JS 中的内置类和基类;
- Object
- String
- Number
- Bigint
- Boolean
- Null
- Undefined
- Array
- RegExp
- Function
- ....
Object
是 JS 中的基类,剩下的所有内置类,都是基与Object
类之上的;
可以通过下面代码来查看内之类和 Object 的关系;
console.dir(Number)
console.dir(String)
console.dir(Array)
最终都会找到
__proto__:
constructor: ƒ Object()
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()
同样的,我们获取 DOM 的结果,也是这样的原理,在控制台查看divs
也会发现,指向Object
基类;
let divs = document.querySelectorAll('div');
这些类和实例就是 JS 中的核心,我们如果想深刻理解和学习 JS,就不可避免的需要了解 JS 世界中这种运行机制,这就是我们为什么要学习面向对象的原因。
学习面向对象的目的
我们学习面向对象的目的:就是学习如何当好一名上帝。
那些创建事物的不同方式就是我们需要学习的技巧;
上面是安邦自己的理解,描述的并不全面和系统,但是可以让你迅速知道面向对象的真正精髓!你最开始知道这些就好了,这些才是面向对象的核心思想;
我们可以先看下维基百科上对面向对象的概述