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. P1776 宝物筛选

    题目: 正文: 啊,多重背包真恶心... 一开始我是把多重背包改成了01背包,然鹅我当时是直接1个1个的往后摞的... 参见以下代码: for(int i=1;i<=n;++i){//平平无奇的 ...

  2. Go的100天之旅-07条件和循环

    目录 条件语句 if条件语句 switch条件语句 循环语句 for循环 goto语句 条件语句 Go的条件语句和其它语言类似,主要是不支持三目运算符所以?:这种条件判断是不支持的.Go提供的条件判断 ...

  3. DEBUG ArrayList

    1,ArrayList面试必问 说说ArrayList和LinkedList的区别? ArrayList基于数组实现,LinkedList基于链表实现,不同的数据结构决定了ArrayList查询效率比 ...

  4. k8s极简史:K8s多集群技术发展的历史、现状与未来

    引子 随着云原生技术的普及,越来越多的企业使用Kubernetes来管理应用,并且集群规模也呈爆发式增长,企业也亟需应对随集群规模增长而带来的各种挑战.同时,为了更好地提供高可用.弹性伸缩的应用,企业 ...

  5. redis pipelined 示例

    redis 常用的数据类型 有序集合(sort set).无序集合 (set),hashMap redis pipelined 示例 List<Object> list = jedisTe ...

  6. u盘安装 osx 出现 “不能验证”

    关于安装是出现关于出现“不能验证”错误: 解决办法 :打开终端 在"终端"里面修改时间 输入:date 032208102015.20

  7. jmeter接口测试 -- 数据库操作(mysql)

    一.操作类型 语句类型 1.查询语句 2.非查询语句 1)update 2)insert into 3)删除 二.把返回值的化为变量 1.执行语句,并引用变量 2.查看结果

  8. placeholder CSS设置

    IE似乎一个冒号才生效,而chrome则是两个冒号才生效 input::-webkit-input-placeholder{ color:red; } input:-ms-input-placehol ...

  9. Vue、Nuxt服务端渲染,NodeJS全栈项目,面试小白的博客系统~~

    Holle,大家好,我是李白!! 一时兴起的开源项目,到这儿就告一段落了. 这是一个入门全栈之路的小项目,从设计.前端.后端.服务端,一路狂飙的学习,发量正在欣喜若狂~~ 接触过WordPress,H ...

  10. ASP.NET Core中的响应压缩

    介绍     响应压缩技术是目前Web开发领域中比较常用的技术,在带宽资源受限的情况下,使用压缩技术是提升带宽负载的首选方案.我们熟悉的Web服务器,比如IIS.Tomcat.Nginx.Apache ...