JS面向对象两大编程思想

面向过程

面向对象

面向过程编程POP

        面向过程就是分析出问题的需要步骤,然后用函数一步一步的实现,使用的时候一个一个调用就可以了

面向对象编程OOP

        面向对象是把事物分解成一个个对象,然后由对象之间分工与合作
        面向对象具有灵活,代码可以重复使用,容易维护和开发的优点,适合大型软件开发项目;

面向对象的特点

        封装性
        继承性
        多态性

面向过程

        优点:性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程。
        缺点:没有面向对象易维护、易复用、易扩展

面向对象

        优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
        缺点:性能比面向过程低

对象

    对象是一个具体的事物,看得见摸得着的实物。例如,一本书、一辆汽车、一个人可以是“对象”,一个数据库、一张网页、一个与远程服务器的连接也可以是“对象”。
    在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。

对象是由属性和方法组成的:

        属性:事物的特征,在对象中用属性来表示(常用名词)
        方法:事物的行为,在对象中用方法来表示(常用动词)
    在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
    在 ES6 中新增加了类的概念,可以使用 class 关键字声明一个类,之后以这个类来实例化对象。
        类抽象了对象的公共部分,它泛指某一大类(class)
        对象特指某一个,通过类实例化一个具体的对象

类 class

        类抽象了对象的公共部分,它泛指某一大类(class)
        对象特指某一个,通过类实例化一个具体的对象
    面向对象的思维特点:
        1. 抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板)
        2. 对类进行实例化, 获取类的对象

创建类

    语法
    class Star {
        constructor(uname){
            this.uname=uname;
        }
    }

创建实例

    var ldh = new Star('刘德华');
    注意: 类必须使用 new 实例化对象

类 constructor 构造函数

    constructor() 方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过 new 命令生成对象实例时,自动调用该方法。如果没有显示定义, 类内部会自动给我们创建一个constructor()

类添加方法

        语法:
            class Person {
                constructor(name,age) { // constructor 构造器或者构造函数
                    this.name = name;
                    this.age = age;
                }
                say() {
                    console.log(this.name + '你好');
                }
            }

创建实例:

        var ldh = new Person('刘德华', 18);
        ldh.say()
    注意: 方法之间不能加逗号分隔,同时方法不需要添加 function 关键字。
    继承
    语法:
        class Father{ // 父类
        }
        class Son extends Father { // 子类继承父类
        }

super 关键字

        super 关键字用于访问和调用对象父类上的函数。可以调用父类的构造函数,也可以调用父类的普通函数

ES6 中的类和对象

三个注意点:

        1. 在 ES6 中类没有变量提升,所以必须先定义类,才能通过类实例化对象.
        2. 类里面的共有属性和方法一定要加this使用.
        3. 类里面的this指向问题.
        4. constructor 里面的this指向实例对象, 方法里面的this 指向这个方法的调用者
 
    class Star {
constructor(uname,age){
this.uname=uname;
this.age=age;
}
sing(song) {
console.log(this.uname + song);
}
}
var ldh = new Star('刘德华',18);
var zxy = new Star('张学友',20);
console.log(ldh);
console.log(zxy);
ldh.sing('哈哈哈') 继承
class Father{
constructor(){}
money(){
console.log('100');
}
}
class Son extends Father{ }
var son=new Son()
son.money()
class Father{
constructor(x,y,a,b){
this.x=x;
this.y=y;
this.a=a;
this.b=b;
}
sum(){
console.log(this.x+this.y);
console.log(this.a*this.b);
}
}
class Son extends Father{
constructor(x,y,a,b){
super(x,y,a,b) //调用父类的构造函数
}
}
var son=new Son(1,5,3,4);
son.sum()

JS

class Father{
constructor(){ }
say(){
return '我是父亲'
}
}
class Son extends Father{
say() {
// super.say() super 调用父类的方法
console.log(super.say() + '的儿子');
}
}
var son=new Son()
son.say() // 子类继承父亲的加法 同时拓展减法
class Father{
constructor(x,y){
this.x=x;
this.y=y;
}
sum(){
console.log(this.x+this.y);
}
}
class Son extends Father{
constructor(x,y){
// super必须在子类this前面才行
// 利用super调用父亲的构造函数
super(x,y);
this.x=x;
this.y=y;
}
subtract(){
console.log(this.x-this.y);
}
}
var son=new Son(4,2)
son.subtract()
son.sum()
<button>点击</button>
<script>
var that;
class xufei {
constructor(uname){
// constructor里面的this指的是创建的实例
console.log(this);
that=this;
console.log(that); this.uname=uname;
this.btn=document.querySelector("button")
this.btn.onclick=this.sing;
}
sing(){
// 这个this指的是btn 因为是这个按钮调用了
console.log(this);
console.log(that.name);
}
}
var ldh = new xufei('刘德华')

JS

ES6 面向对象笔记的更多相关文章

  1. ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能

    前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>, ...

  2. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  3. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  4. JS面向对象笔记二

    菜单导航,<JS面向对象笔记一>,  参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函 ...

  5. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  6. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  7. ES6学习笔记<三> 生成器函数与yield

    为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...

  8. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  9. ES6学习笔记<一> let const class extends super

    学习参考地址1  学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...

随机推荐

  1. scrapy 基础组件专题(一):scrapy框架中各组件的工作流程

    Scrapy 使用了 Twisted 异步非阻塞网络库来处理网络通讯,整体架构大致如下(绿线是数据流向): Scrapy主要包括了以下组件: 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事 ...

  2. celery 基础教程(二):简单实例

    前言 使用celery包含三个方面:1. 定义任务函数.2. 运行celery服务.3. 客户应用程序的调用. 实例一: #1. 定义任务函数 创建一个文件 tasks.py输入下列代码: from ...

  3. CRM【第二篇】: stark组件

    介绍: stark组件,是一个帮助开发者快速实现数据库表的增删改查+的组件.目标: 10s 中完成一张表的增删改查. 前戏: django项目启动时,自定义执行某个py文件. django启动时,且在 ...

  4. bzoj3620似乎在梦中见过的样子

    bzoj3620似乎在梦中见过的样子 题意: 给出一个字符串,要求求出形如A+B+A的子串数量,且lenA≥k,lenB≥1.字符串长度≤15000,k≤100,所以字符长度为小写字母. 题解: 第一 ...

  5. OSCP Learning Notes - Buffer Overflows(2)

    Finding the Offset 1. Use the Metasploite pattern_create.rb tool to create 5900 characters. /usr/sha ...

  6. Spring Boot 2.x基础教程:使用EhCache缓存集群

    上一篇我们介绍了在Spring Boot中整合EhCache的方法.既然用了ehcache,我们自然要说说它的一些高级功能,不然我们用默认的ConcurrentHashMap就好了.本篇不具体介绍Eh ...

  7. STL源码剖析:迭代器

    准备知识 什么是迭代器? 迭代器是链接容器和算法的桥梁,所有的算法都通过迭代器操作容器中的数据 迭代器是一种智能指针,最重要的操作符重载就是operator*,operator-> 迭代器的实现 ...

  8. python-闭包和装饰器-02-装饰器(decorator)

    装饰器(decorator) 理解了上一章的闭包之后,装饰器就是闭包的一种应用,只是外部函数的参数传入的不是普通的变量类型,而是传入一个函数名.装饰器一般用于:不修改被装饰函数(即外部函数传入的参数) ...

  9. 小书MybatisPlus第9篇-常用字段默认值自动填充

    本文为Mybatis Plus系列文章的第9篇,前8篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...

  10. SYN 攻击原理及解决方法

    原理SYN foold攻击主要针对tcp通信三次握手期间做的手脚,所以要弄懂这个攻击的原理我们首先必须知道tcp三次握手的详细过程 由上图可知tcp三次握手顾名思义要经过三个步骤,这三个步骤分别是 客 ...