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. python小游戏-水文

    脚本不会,全都白费.所以就去学习了简单的python,结果不慎学了python中的pygame,浪费了不少时间,没啥用如果不做游戏个人觉得最好别学,学爬虫她不香吗?不过也有一点收获,打飞机小游戏,源码 ...

  2. 如何用 Python 做自动化测试【进阶必看】

    一.Selenium 环境部署 1. window 环境部署 1.1 当前环境Win10 64 位系统:Python3.6.2(官方已经更新到了 3.6.4) 官方下载地址:https://www.p ...

  3. Java多线程原理+基础知识(超级超级详细)+(并发与并行)+(进程与线程)1

    Java多线程 我们先来了解两个概念!!!! 1.什么是并发与并行 2.什么是进程与线程 1.什么是并发与并行 1.1并行:两个事情在同一时刻发生 1.2并发:两个事情在同一时间段内发生 并发与并行的 ...

  4. Ethical Hacking - NETWORK PENETRATION TESTING(7)

    Gaining Access to encrypted networks Three main encryption types: 1. WEP 2.WPA 3.WPA2 WEP Cracking W ...

  5. Git、Github、Gitkraken 学习笔记

    <Git.Github.Gitkraken 学习笔记> 一.写在前面 1.参考资料 本文参考 <Pro Git> 一书. 在官网有免费在线版可供阅读:https://git-s ...

  6. Alink漫谈(十四) :多层感知机 之 总体架构

    Alink漫谈(十四) :多层感知机 之 总体架构 目录 Alink漫谈(十四) :多层感知机 之 总体架构 0x00 摘要 0x01 背景概念 1.1 前馈神经网络 1.2 反向传播 1.3 代价函 ...

  7. Bug--WARN Please initialize the log4j system properly.

    log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory). log4j:WARN ...

  8. Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  9. PHP系列之钩子

    PHP 提供的钩子 PHP 和 Zend Engine 为扩展提供了许多不同的钩子,这些扩展允许扩展开发人员以 PHP userland 无法提供的方式控制 PHP 运行时. 本章将展示各种钩子和从扩 ...

  10. PHP array_uintersect_assoc() 函数

    实例 比较两个数组的键名和键值(使用内建函数比较键名,使用用户自定义函数比较键值),并返回交集: <?phpfunction myfunction($a,$b){if ($a===$b){ret ...