/*
        面向对象编程
            
            本质 创建一个对象
                 可以用 属性属性值的 方式 存储 数据参数
                        函数的参数 只能存储在形参之中 只能在函数内部使用 不能在函数外部直接调用
                 可以用 函数的形式 存储需要执行的程序内容
                 调用生成的对象,属性属性值就是需要的数据参数,函数方法就是需要执行的程序
    
            定义 属性属性值存储参数数据
                通过构造函数定义实例化对象
                    通过 new 关键词/语法 执行调用 构造函数
                    new 语法 会自动定义 一个对象,并且返回一个对象
                    this 指向 这个 被JavaScript自动创建 自动返回的 对象
                    返回的对象,最终会存储在变量中
                    this 实际指向的就是 这个变量
                    在构造函数中,不能使用 let const 定义变量
            定义 函数方法
                通过 prototype 来定义 构造函数的方法
                    prototype 是每一个 函数都天生具有的 属性 是一个 公共的空间
                    所有通过这个构造函数生成的实例化对象,都可以代用这个公共空间中的内容
                    在 prototype 中 只能调用 之前 在构造函数中定义的实例化对象的属性和属性值
                    在 prototype 中 不能以 this 语法定义属性和属性值
                    在 prototype 中 可以用 let  或者 const 定义 变量数值
                    本质上就是在定义一个匿名函数 只是存储在 prototype 中的一个匿名函数
            原型链:
                prototype : 函数天生就具有的属性
                            是一个公共空间 构造函数生成的实例化对象的__proto__ 就是 构造函数的prototype 
                __proto__ : 对象天生就具有的属性
                            通过 __proto__ 可以访问 生成这个对象,构造函数的 prototype 的公共空间
                所谓的原型链 : 将 数据 通过 __proto__ 串联起来,形成数据链结构 称为原型链
                              定义在顶级/父级对象,公共空间的中的属性和方法,可以被所有的子级通过 __proto__ 调用和执行
                              原型链的执行是一个自动过程 当 一个对象等调用属性/方法时,先在自身上,自身没有去父级公共空间找,父级没有再去父级的父级找
                              以此类推,最终找到 顶级对象 Object 如果也没有,返回undefined
                   顶级对象 Object (定义了一个方法) ---> Array() 构造函数 ---> 生成一个 arr[] 数组
                                                                            
                                                                     
                    顶级对象 Object (定义的方法) <----  Array() 构造函数 通过 __proto__ <--- arr[] 数组 通过 __proto__
        
                爷爷 (方法) ---- 爹  --- 孙子 
                爷爷身上有个函数方法,没有定义在爹身上,也没有定义在孙子身上
                但是 孙子 可以通过 __proto__ 找到 爹
                爹 本身也有 __proto__ 可以 找到 爷爷 然后 调用 爷爷身上的 方法
 
   <script>  
        const obj = new CreateObj('张三');
        obj.fun();
        // 使用 function 定义构造函数
        // JavaScript会执行预解释,可以提前调用构造函数,生成实例化对象
        function CreateObj(name) {
            this.name = name;
        }
        // 定义 prototype 公共空间中的 内容
        // 不会被 预解释 
        // 调用 fun 这个函数 必须在 这个行代码之后,不能提前调用
        CreateObj.prototype.fun = function(){
            console.log( this.name );
        } 
        console.log(obj);
        // ES5 语法定义的构造函数,在面向对象编程中,还有很多问题
        // ES6 语法中,定义了新的构造函数的定义方法 class 类
        //            专门用于定义 构造函数的语法
        //            新增很多构造函数的操作方法,让js的面向对象编程更加完善
        //            在 三阶段 框架中 对 js 的面向对象 才是完整的 面向对象
        // class语法的本质就是 构造函数 
        // 语法结构和内容是完全相同的 只是 代码书写不同
        // 就好像  for循环 和 while循环
        // ES6 的 class 没有预解析,不能提前调用
        // ES5
        function CreateObj1(name) {
            this.name = name;
        }
 
        CreateObj.prototype.fun1 = function(){
            console.log( this.name );
        } 
        const obj1 = new CreateObj1('张三');
        obj1.fun1();
        // ES6
        class CreateObj2{
            constructor(name){
                this.name = name;
            }
            fun2(){
                console.log( this.name )
            }
        }
        const obj2 = new CreateObj1('张三');
        obj2.fun2();
 
    </script>

面向对象编程 es5和es6的构造函数的更多相关文章

  1. Javascript面向对象编程(二):构造函数的继承 作者:yuan一峰

    Javascript面向对象编程(二):构造函数的继承   作者: 阮一峰 日期: 2010年5月23日 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生 ...

  2. javascript 面向对象编程(工厂模式、构造函数模式、原型模式)

      javascript 面向对象编程(工厂模式.构造函数模式.原型模式) CreateTime--2018年3月29日17:09:38 Author:Marydon 一.工厂模式 /** * 工厂模 ...

  3. js面向对象编程(三)非构造函数的继承(转载)

    Javascript面向对象编程(三):非构造函数的继承 今天是最后一个部分,介绍不使用构造函数实现"继承". 一.什么是"非构造函数"的继承? 比如,现在有一 ...

  4. Javascript面向对象编程(二):构造函数的继承 by 阮一峰

    今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = & ...

  5. (转)Javascript面向对象编程(二):构造函数的继承(作者:阮一峰)

    对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = "动物& ...

  6. Javascript面向对象编程(二):构造函数的继承

    这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个" ...

  7. JS面向对象编程(二):构造函数的继承

    对象之间继承的 5 中方法.            比如, 现在有一个"动物"对象的构造函数.            function Animal(){              ...

  8. 面向对象编程-终结篇 es6新增语法

    各位,各位,终于把js完成了一个段落了,这次的章节一过我还没确定下面要学的内容可能是vue也可能是前后端交互,但无论是哪个都挺兴奋的,因为面临着终于可以做点看得过去的大点的案例项目了,先憋住激动地情绪 ...

  9. js面向对象编程(二)构造函数的继承(转载)

    Javascript面向对象编程(二):构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继 ...

  10. 转:javascript面向对象编程

    作者: 阮一峰 日期: 2010年5月17日 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学 ...

随机推荐

  1. Django框架——模版层之标签、自定义过滤器 标签及inclusion_tag(了解)、模版的继承与导入、模型层之前期准备、ORM常用关键字

    模版层之标签 {% if 条件1(可以自己写也可以用传递过来的数据) %} <p>今天又是周三了</p> {% elif 条件2(可以自己写也可以用传递过来的数据) %} &l ...

  2. PostgreSQL 14.4的安装以及使用以及一些安装的异常

    PostgreSQL 14的安装以及使用 因为公司的一些要求,可能要换数据库,虽然之前装过,但是版本感觉还是新一点比较好,所以重新装一下 首先下载文件,直接去官网下载就行 https://www.en ...

  3. 第11課-Channel Study For Create Custom Restful Service

    这节课我们一起学习利用Mirth Connect的HTTP Listener源通道与JavaScript Writer目的通道搭建自定义Restful风格webapi服务. 1.新建名为'Custom ...

  4. 持续定义Saas模式云数据仓库+BI

    云数据仓库概述 今天和大家一起探讨一下我们Saas模式下云数据仓库加上商业智能BI能有什么新的东西出来.我们先来看一下云数据仓库的一些概述.预测到2025年, 全球数据增长至175ZB, 中国数据量增 ...

  5. 百信银行基于 Apache Hudi 实时数据湖演进方案

    简介: 本文介绍了百信银行实时计算平台的建设情况,实时数据湖构建在 Hudi 上的方案和实践方法,以及实时计算平台集成 Hudi 和使用 Hudi 的方式. 本文介绍了百信银行实时计算平台的建设情况, ...

  6. WPF 将控件放入到 UserControl 里获取 HwndSource 为空的情况

    本文记录将 WPF 控件放入到 UserControl 里,如果此 UserControl 没有被设置 Visibility 为可见过,那么放在此 UserControl 内的控件将获取不到 Hwnd ...

  7. InternLM2 Demo实操-书生浦语大模型实战营第二期第2节作业&大语言模型3

    大语言模型-3.InternLM2 Demo实操 书生浦语大模型实战营第二期第二节作业 本文包括第二期实战营的第2课作业的相关内容.本来是想在学习笔记中给InetrnLM官方教程做做补充的,没想到官方 ...

  8. DNS(1) -- DNS服务及dns资源类型

    目录 1.1 DNS服务概述 1.2 DNS域名结构 1.3 DNS解析原理 1.3.1 DNS查询类型 1.3.2 解析答案 1.4 DNS资源记录类型 1.1 DNS服务概述 DNS(Domain ...

  9. UE4 C++调用C# DLL(DllExport方法)

    之前看见园子里一篇C++调用C#的文章,参考后拿UE试一下.刚开始尝试了C# dll > CLR C++ DLL > Native C++ DLL的做法, 原生环境下是可以的,但是到UE4 ...

  10. pageoffice6 版本在线打开word 文件,实现多用户同时编辑

    总体来说,各种Web系统中的Word文档在线处理大体可以分为以下四种流转处理方式: A用户编辑完,流转给B用户修改,再流转给C用户修改,直到最后.每个用户都是针对全文修改的,如果需要在这一篇文档中能区 ...