什么是面向对象?
- 面向对象是一个非常伟大的编程思想,而JS就是基于这个思想构建出来的一门编程语言,所以在JS中存在:对象、类、实例 三个概念!!
- 面向对象思想
- 对象:万物皆对象
- 类: 对“对象”的归类和细分,定义了一切事物的抽象特点
- 实例:类中的具体成员
- 公有:类的所有实例(大家)都有的东西
- 私有:当前实例 特有的东西
- JS中的类:[内置类] [自定义类]
- 每一种数据类型又有自己对应的内置类:Number、String、Boolean、Symbol、BigInt、Object(Array、RegExp、Date、Set、Map、ArrayBuffer…)、Function
- 每一个HTML元素标签「包含window/document等」在JS中都有自己的内置类,例如:
**div -> HTMLDivElement -> HTMLElement -> Element -> Node -> EventTarget ->**``** Object**
- 面向对象 OOP :javascript、java、php、python、C#(ASP.NET)、Go、Ruby…
面向过程 POP :C
function Func() {
this.n = 0;
}
Func.prototype.sum = function sum() {
this.n++;
console.log(this.n);
}
let f1 = new Func;
f1.sum(); //1
f1.sum(); //2
let f2 = new Func;
f2.sum(); //1
f2.sum(); //2
理解对象
对象:定义为一组属性的无序合集内容是一组键/值对 值可是数据或者函数;
创建对象几张方式:对象方式
new 操作符后跟 Object 构造函数
var person = new Object();
person.name = "junjun";
person.age = 18;
使用对象字面量表示法
var person = {
name: "junjun";
age: 18;
}
Object.create () 方法,使用指定的原型对象及其属性去创建一个新的对象。
Object.create(null);//创建一个空对象
-----------------------------------------------
const person = {
name: 'tom',
isHuman:false,
say: function () {
console.log(`My name is ${this.name} Am I human? ${this.isHuman}`);
}
};
const xm = Object.create(person); //=> xm.__proto__ === person
xm.name = "xiaoming"; // name属性被设置在新对象me上,而不是现有对象person上
xm.isHuman = true; // 继承的属性可以被重写
xm.say(); // My name is xiaoming. Am I human? true
小结
- 字面量和
new
关键字创建的对象是Object
的实例,原型指向Object.prototype
,继承内置对象Object
Object.create(arg, pro)
创建的对象的原型取决于arg
,arg
为null
,新对象是空对象,没有原型,不继承任何对象;arg
为指定对象,新对象的原型指向指定对象,继承指定对象