什么是面向对象?

  • 面向对象是一个非常伟大的编程思想,而JS就是基于这个思想构建出来的一门编程语言,所以在JS中存在:对象、类、实例 三个概念!!
  1. 面向对象思想
  2. 对象万物皆对象
  3. : 对“对象”的归类和细分,定义了一切事物的抽象特点
  4. 实例:类中的具体成员
  5. 公有:类的所有实例(大家)都有的东西
  6. 私有:当前实例 特有的东西
  7. JS中的类:[内置类] [自定义类]
  8. 每一种数据类型又有自己对应的内置类:Number、String、Boolean、Symbol、BigInt、Object(Array、RegExp、Date、Set、Map、ArrayBuffer…)、Function
  9. 每一个HTML元素标签「包含window/document等」在JS中都有自己的内置类,例如:**div -> HTMLDivElement -> HTMLElement -> Element -> Node -> EventTarget ->**``** Object**
  • 面向对象 OOP :javascript、java、php、python、C#(ASP.NET)、Go、Ruby…
  • 面向过程 POP :C

    1. function Func() {
    2. this.n = 0;
    3. }
    4. Func.prototype.sum = function sum() {
    5. this.n++;
    6. console.log(this.n);
    7. }
    8. let f1 = new Func;
    9. f1.sum(); //1
    10. f1.sum(); //2
    11. let f2 = new Func;
    12. f2.sum(); //1
    13. f2.sum(); //2

    理解对象

    对象:定义为一组属性的无序合集内容是一组键/值对 值可是数据或者函数;

创建对象几张方式:对象方式
new 操作符后跟 Object 构造函数

  1. var person = new Object();
  2. person.name = "junjun";
  3. person.age = 18;

使用对象字面量表示法

  1. var person = {
  2. name: "junjun";
  3. age: 18;
  4. }

Object.create () 方法,使用指定的原型对象及其属性去创建一个新的对象。

  1. Object.create(null);//创建一个空对象
  2. -----------------------------------------------
  3. const person = {
  4. name: 'tom',
  5. isHuman:false,
  6. say: function () {
  7. console.log(`My name is ${this.name} Am I human? ${this.isHuman}`);
  8. }
  9. };
  10. const xm = Object.create(person); //=> xm.__proto__ === person
  11. xm.name = "xiaoming"; // name属性被设置在新对象me上,而不是现有对象person上
  12. xm.isHuman = true; // 继承的属性可以被重写
  13. xm.say(); // My name is xiaoming. Am I human? true

小结

  • 字面量和new关键字创建的对象是Object的实例,原型指向Object.prototype,继承内置对象Object
  • Object.create(arg, pro)创建的对象的原型取决于argargnull,新对象是空对象,没有原型,不继承任何对象;arg为指定对象,新对象的原型指向指定对象,继承指定对象