什么是面向对象?
- 面向对象是一个非常伟大的编程思想,而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(); //1f1.sum(); //2let f2 = new Func;f2.sum(); //1f2.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__ === personxm.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为指定对象,新对象的原型指向指定对象,继承指定对象
