人,工人

//类的定义
    function Person(name,age){ //构造函数
        //工厂模式
        //1.原料
        //var obj = new Object();
        //2.加工
        this.name = name;
        this.age = age;
        //3.出厂
        //return obj;
    }
    //方法
    Person.prototype.showName = function(){
        return this.name;
    };

//实例化
    var p1 = new Person('zhangsan',28);
        new:
            1. 创建一个新的空白对象
            2. 把这个对象赋值给 this
            3. 自动返回this
    //继承   工人 -> 人
    1)继承属性
        function Worker(name,age,job){
            //继承父类属性
            Person.apply(this,arguments);
            //增加自己的属性
            this.job = job;
        }
    2)继承方法
        Worker.prototype = new Person();
        Worker.prototype.constructor = Worker;

* 万物皆对象
* 能new的东西都是函数
* 构造函数约定首字母大写
* 实例化一个类的时候(new Person()),构造函数自动执行
* 类的原型 prototype 可以用来扩展系统方法
* 解决this:
    1) 在this正确的地方,存一下
    2) fn.call(this的指向,参数1...);
    3) fn.apply(this的指向,[参数1....]);
    4) bind
        var a = fn.bind(this的指向,参数1);
        a(参数2);

//this 正确
        oBtn.onclick = function(){
            //this 指向按钮,希望指向外面
        }.bind(this);
* 类型检测
    1) typeof : 基本类型
        数字,字符串,布尔,undefined
    2)instanceof : 用于检测 当前对象是不是某个类的实例, 包含父级以及一直向上
        alert(p1 instanceof Person);   √

alert(p1 instanceof  Object);  √
        
    3)constructor:用户判断当前对象的是不是由某个类构造出来的
        p1.constructor == Person

==========================
一、ES6前面向对象周边的知识

1、给一个类的原型上加方法时,要一个一个加,不能用一个JSON整体覆盖,否则,会把原来已经有的东西覆盖掉(prototype.constructor 被覆盖)

2、原型链
    使用某个方法或属性时,先看自己有没有,如果自己有就用自己的,否则找父级...一直找到为止 —— Object

* 如果一个对象属于子类,那么这个对象必然属于这个子类的父类。

* 作用链:
    var c = 100;
    function aaa(){
        var c = 5;
        function bbb(){
            //var c = 12;
            alert(c);
        }
        bbb();
    }
    aaa();

show(1)(2)(3); —— 6        //返回函数
aa(1).bb(2).cc(3); —— 6    //返回JSON

3、所有东西都是对象?
    基本类型不是对象。
    除了基本类型外,其它的东西都是对象。

包装类型:
    数字            Number
    字符串        String
    布尔            Boolean
    undefined        Undefined ×
    
* 包装类型,在JS中,没用。

4、单体模式/单例模式 设计模式
    以前: 工厂模式
    * 只有一个实例,不能扩展 —— 利用 JSON

let Person = {
        name:'张三',
        age:18,
        showName(){
            return this.name + '^_^';
        }
    };
5、命名空间
    利用JSON,把一些独立的模块、频道、子系统 ,中使用的变量的包起来。
    达到: 避免变量名冲突

例:
        let top = {
            a:12
        }
        let body = {
            a:5
        }
        let footer = {
            a:20
        }

top.a
        body.a
        footer.a

变量冲突的解决:
    1、封闭空间
    2、面向对象 :  把相同的变量放到不同的对象里
    3、命名空间(名称空间)
    4、模块化

6、this 的问题
    this:    发生事件的对象(元素),当前方法属于谁,this就是谁

对this优先级进行排序:只供参考
        1)  new > 定时器
        2)  定时器 > 事件
        3)  事件 > 方法
        4)  其它 (window)

优先级:  new > 定时器 > 事件 > 方法
        
7、js 中的  BUG (自相矛盾的地方)
    1、Object 和 Function 互为爹,自称爹
        * 一切都是对象
        * 能new 都是函数
    2、只认爹,不认爷
    3、花祖宗的钱,不认祖宗

==========================
二、ES6面向对象
类、构造函数 —— 面向对象(java)

类:
定义——
    //类
    class Person{
        //构造函数
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        //方法
        showName(){
            return this.name;
        }
        showAge(){
            return this.age;
        }
    }
使用——
    let p1=new Person('zhang3',28);

继承:
    class Worker extends Person{
        constructor(name,age,job){
            super(name,age);  //相当于调用 父级 的构造函数
            this.job = job;
        }
        showJob(){
            return this.job;
        }
    }

*super —— 超类

==========================

用面向对象的方式写程序 , 没有统一的写法。

例1:点div变红
    
例2:选项卡

==========================
模块化:
一、什么,为什么
    模块化:把一个大的系统,一个较复杂的功能,切分为若干个小部分。
        有利于 系统的扩展、人员之间分工合作、可以提高效率...
二、JS中模块化:
    09年,美国,一哥们,写了一个程序 —— NodeJS
        标志着JS中模块化开发的开始。
三、JS中模块化遵循的标准:
    CommonJs: NodeJS —— 同步
        const express = require('express');
        let server = express();
    AMD: —— 异步
        Asynchronous  Module Definition  异步模块定义
        库:requirejs
    CMD:
        库:seajs
        官网: seajs.org
四、requirejs
    安装:
        1) 官网下载
            http://requirejs.org/
        2) npm i requirejs

前端学习(三十四)对象&模块化(笔记)的更多相关文章

  1. 前端学习(三十五)模块化es6(笔记)

    RequireJs:一.安装.下载    官网: requirejs.org    Npm:  npm i requirejs二.使用    以前的开发方式的问题:        1).js 是阻塞加 ...

  2. 前端学习(十四):CSS布局

    进击のpython ***** 前端学习--CSS布局 每个模块的相关央视就算是进本上都完成了,但是,这些模块想放在不同的位置 横着放,竖着放,斜着放... ... 想怎么放怎么放 那就用到了今天要说 ...

  3. 前端学习(三十六)promise(笔记)

    一个页面:  头部.用户信息.新闻列表 jquery ajax:  1.$.ajax({    url:'',    dataType:'json', }).then(res=>{    //r ...

  4. 前端学习(三十八)vue(笔记)

    Angular+Vue+React    Vue性能最好,Vue最轻=======================================================Angular     ...

  5. 前端学习(三十)es6的一些问题(笔记)

    赋值表达式    document.onclick = document.onmouseover = fn;    var a = b = c = d = 5;             不推荐 逗号表 ...

  6. 前端学习(三十九)移动端app(笔记)

    移动端App    开发App的三种方式    Native App         原生        底层语言        java         Android        oc      ...

  7. 前端学习(三十七)angular(笔记)

    MVC     后台    M         Module             数据层    V         View             视图层    C         Contro ...

  8. 前端学习(三)css选择器(笔记)

    字体样式:    color:red:    font-size:12px:    font-weight:bold/normal;    font-style:italic/normal;    f ...

  9. Salesforce LWC学习(三十四) 如何更改标准组件的相关属性信息

    本篇参考: https://www.cnblogs.com/zero-zyq/p/14548676.html https://www.lightningdesignsystem.com/platfor ...

随机推荐

  1. es6 扩展运算符 三个点...

    es6中引入扩展运算符…,它用于把一个数组转化为用逗号分隔的参数序列,它常用在不定参数个数时的函数调用,数组合并等情形.因为typeScript是es6的超集,所以typeScript也支持扩展运算符 ...

  2. UI定位元素大全(跟App定位元素差不多哦)

    selenium+python自动化之元素定位 作者:一飞冲天 同样的道理,把一个页面上的元素当成是一个对象(你的女神),我们就可以通过她的属性值来找到她,比如她性别女爱好爬山---------你就可 ...

  3. 【HDOJ6667】Roundgod and Milk Tea(模拟)

    题意:有n个班级,每个班级有a[i]个人,b[i]杯奶茶 每个人至多喝一杯奶茶,且不能喝自己班的 问能喝到奶茶的最多总人数 n<=1e6,a[i],b[i]<=1e9 思路: 做法一: # ...

  4. 《Javascript设计模式与开发实践》关于设计模式典型代码的整理:单例模式、策略模式、代理模式、迭代器模式、发布-订阅模式、命令模式、组合模式

    1.单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 使用闭包封装私有变量// 使用闭包创建单例var user = (function () { var _name = 'sven' ...

  5. sql语句insert into where 错误解析

    sql语句中,insert into 代表得是插入一条新得数据,全新得数据,所以你这样得写法是错误得,比如: "insert into klkl_Service_shop(name_real ...

  6. ElasticSearch2.2.0安装

    一.ElasticSearch2.2.0安装 1.下载ElasticSearch2.2.0安装包 https://download.elastic.co/elasticsearch/elasticse ...

  7. elementUI 弹出框添加可自定义拖拽和拉伸功能,并处理边界问题

    开发完后台管理系统的弹出框模块,被添加拖拽和拉伸功能,看了很多网上成熟的帖子引到项目里总有一点问题,下面是根据自己的需求实现的步骤: 首先在vue项目中创建一个js文件eg:dialog.js imp ...

  8. Mac002--Git安装

    Mac--Git安装 注意:在安装Git前,可先安装homebrew,应用brew命令安装Git即可. 一.Mac 安装homebrew 参考博客:https://blog.csdn.net/yuex ...

  9. 爬虫之requests 高级用法

    1. 文件上传 import requests files = {'file': open('favicon.ico', 'rb')} r = requests.post("http://h ...

  10. libOpenThreads库链接冲突错误

    最近在linux 上安装了3.7.0版本的OpenSceneGraph,而在安装之前没有完全卸载之前安装的3.6.3版本,导致在编译程序链接时出现库引用冲突,在便以后出现以下警告信息: /usr/bi ...