首页 > 其他分享 >19. 面向对象

19. 面向对象

时间:2022-12-10 09:47:22浏览次数:30  
标签:console log 19 s1 面向对象 score id name

JS 中的面向对象

JS 中的面向对象,是基于原型的面向对象。JS 中的对象(Object)是依靠构造器(constructor)和原型(prototype)构造出来的。

另外,在ES6中,新引入了 类(Class)和继承(Extends)来实现面向对象。

对象:类的实例化,真实存在的 类:拥有相同属性和行为的对象集合,它
且唯一 是一个模板,不是真实存在的

程序 = 算法 + 语法;
算法:强调的是步骤,一步接一步
缺陷:1.随着问题规模的增加,代码变得逐渐难以控制
2.复用性较差,只能复用函数

五子棋 围棋
a.绘制棋盘 重写
b.黑棋落子
c.判断输赢
d.白棋落子
c.判断输赢

万物皆为对象,先找对象
程序 = 对象 + 对象 + ... + 对象

五子棋 围棋
a.棋子
b.棋盘
c.规则 新的规则对象
d.悔棋

如果有新的需求,则直接添加新的对象即可

面向对象的编程思想,核心问题在于优先分析对象,
(步骤肯定也需要,但是并不会优先考虑)

披着面向对象语法的面向过程代码

ES5方法创建类

通过函数模拟类
// 被当做类的函数也称为构造函数,通过该函数来创建对象

// this的作用:
//1.与事件体连用,代表触发给事件的元素本身
//2.与普通方法连用(不是事件体和构造方法),代表调用该函数的对象
//3.与构造方法连用,代表new出来的对象
//4.与箭头函数连用,代表其父元素的前缀
//类的定义(创建)
    function Student(name,id,score){
        //成员属性
        this.name = name;
        this.id = id;
        this.score = score;

        //成员方法
        this.sleep = function(){
            console.log("sleep");
            console.log(this.id);
        }

        this.eat = function(){
            console.log("eat");
        }

        //在一个成员方法中要使用其他的成员,
        //必须加this前缀
        this.showValue = function(x){
            console.log(this.name,this.id,this.score);
            this.sleep();
            this.eat();
            console.log(x);
        }
    }

    //对象的创建
    //new是和构造函数连用的关键字
    //作用为在堆上开辟该类型的对象存储空间
    let s1 = new Student("武僧佩佩",9527,100);

    //对象的使用
    //对象.属性名
    // console.log(s1.name);
    // console.log(s1.id);
    // console.log(s1.score);
    // s1.eat();
    // s1.sleep();
    s1.showValue(123123);

    // let s2 = new Student("凢凢",111,13);
    // console.log(s2.name);
    // console.log(s2.id);
    // console.log(s2.score);
    // s2.eat();
    // s2.sleep();

    // let json = {
    //     a:123,
    //     // fun:function(){
    //     //     console.log(this);
    //     // }
    //     fun:()=>{
    //         console.log(this);
    //     }
    // }

    // json.fun();

ES6方法创建类

// 语法糖:底层不变,上层换了个写法忽悠你,还是那么挫

    // class 类名{
    //     // 构造方法:定义成员属性
    //     constructor(){

    //     }

    //     // 普通方法:去掉function关键字的成员方法
    // }

    // 类
    class Student{
        constructor(name,id,score){
            this.name = name;
            this.id = id;
            this.score = score;
        }

        sleep(){
            console.log("sleep");
        }

        eat(){
            console.log("eat");
        }

        showValue(){
            console.log(this.name,this.id,this.score);
            this.sleep();
            this.eat();
        }
    }

    let s1 = new Student("老王",1111,9999);

    s1.showValue();

image-20221206195753345

类的组合

 // 组合:一个类的对象是另一个对象的成员。
    class Birthday{
        constructor(y,m,d){
            this.y = y;
            this.m = m;
            this.d = d;
        }

        showValue(){
            console.log(this.y,this.m,this.d);
        }
    }

    class Student{
        constructor(name,id,score,bir){
            this.name = name;
            this.id = id;
            this.score = score;
            this.bir = bir;
        }

        showValue(){
            console.log(this.name,this.id,this.score);
            this.bir.showValue();
        }
    }

    let bir = new Birthday(1990,12,29);
    let s = new Student("凢凢",9527,100,bir);

    s.showValue();

标签:console,log,19,s1,面向对象,score,id,name
From: https://www.cnblogs.com/qianfanqf/p/16969918.html

相关文章

  • 面向对象
    Loli.cs1publicclassLoli2{3publicstringname;4publicboolsex;5publicintage;6publicintheight;7publicintwe......
  • 前端开发系列016-基础篇之Javascript面向对象(五)
    title:'前端开发系列016-基础篇之Javascript面向对象(五)'tags:-javaScript面向对象系列categories:[]date:2017-06-0110:52:16一、严格模式说明在JavaScri......
  • 前端开发系列019-基础篇之JavaScript和JSON
    title:'前端开发系列019-基础篇之JavaScript和JSON'tags:-javaScript系列categories:[]date:2017-06-1620:20:13本文输出和JSON有关的以下内容>❐JSON......
  • 我与 ChatGPT 讨论了面向对象语言 中,关于动态调用的问题
    你好,支持面向对象的语言中,"方法表"是用来处理什么的?在面向对象的语言中,“方法表”通常指一个类或对象中定义的方法列表。这些方法定义了该类或对象可以做什么,例如执行特......
  • springcloud部署启动报错Server check fail, please check server 192.168.41.61 ,por
    这两天部署一个新的若依springcloud系统,nacos安装启动没有问题,但是jar包启动的时候一直报错Servercheckfail,pleasecheckserver192.168.41.61,port9848isavailab......
  • [极客大挑战 2019]PHP1
    [极客大挑战2019]PHP1提示:有一个良好的备份网站的习惯寻找一个备份文件字典,我在github上找的:scopion/dic:渗透字典,框架信息泄露,备份文件泄露,配置文件泄露。字典(gith......
  • Chapter7_成为会使用面向对象编程的程序员吧
    理解面向对象编程热身问答Object翻译成中文是什么?对象对象(Object)是表示事物的抽象名词。OOP是什么的缩略语?ObjectOrientProgramming面向对象也可以简称......
  • k8s 1.19.11 Ingress-nginx 的部署
    官网地址:https://kubernetes.github.io/ingress-nginx/github:https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx参考文档:使用ingress......
  • 运用ogg迁移oracle 11g到19c
    文档课题:运用ogg迁移oracle11g到19c.核心思想:利用数据泵导入导出功能初始化数据后通过OGG同步增量数据.源端:192.168.133.103数据库oracle11.2.0.464位,实例名:orcl目......
  • 二、C++面向对象面试题
    二、面向对象1.多态(1)多态的实现有哪几种?黑马程序员C++核心编程第68页静态多态和动态多态。静态多态:是通过重载和模板技术实现的,在编译期间确定函数地址;动态多态:是通过虚函......