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. java 面向对象(二十六):枚举类的使用

    1. 枚举类的说明:* 1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类* 2.当需要定义一组常量时,强烈建议使用枚举类* 3.如果枚举类中只一个对象,则可以作为单例模式的实现方式. ...

  2. java 面向对象(三):类结构 属性

    类的设计中,两个重要结构之一:属性 对比:属性 vs 局部变量 1.相同点: * 1.1 定义变量的格式:数据类型 变量名 = 变量值 * 1.2 先声明,后使用 * 1.3 变量都其对应的作用域 2 ...

  3. JavaWeb项目的目录结构解释(上):

    当我们在IDEA创建JavaWeb项目时,默认的一般会有下图的目录结构,你的开发就是按照下列结构进行开发的,那么我就逐一解释他们的意思: 首先是demo:这个是项目的名字,一般你是自己创建一个与自己项 ...

  4. 深度学习论文翻译解析(十):Visualizing and Understanding Convolutional Networks

    论文标题:Visualizing and Understanding Convolutional Networks 标题翻译:可视化和理解卷积网络 论文作者:Matthew D. Zeiler  Ro ...

  5. bzoj3858Number Transformation*

    bzoj3858Number Transformation 题意: 给一个数n,对其进行k次变换,第i次变换是将当前的n变成大于等于n的最小的i的倍数.求k次变换后n为多少.n≤10^10,k≤10^ ...

  6. 印象笔记如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接  印象笔记如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载a ...

  7. WebApiClientCore简约调用百度AI接口

    WebApiClientCore WebApiClient.JIT/AOT的netcore版本,集高性能高可扩展性于一体的声明式http客户端库,特别适用于微服务的restful资源请求,也适用于各种 ...

  8. IntelliJ IDEA:文件的路径本该是”\“,却变成了”¥“

    修改字体导致的, 有些字体中是用¥替换掉\的,所以,修改到合适的字体就好了

  9. CSS3多栏布局

    CSS3多栏布局 分栏数: column-count:auto|num: auto为默认值,表示元素只有一列.num取值为大于0的整数 每栏宽度: column-width:auto|<leng ...

  10. 小书MybatisPlus第8篇-逻辑删除实现及API细节精讲

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