zoukankan      html  css  js  c++  java
  • 面向对象(一)

    构造对象---混合法

    1.面向对象的三个特点:
    封装,继承,多态(抽象)
    2.对象的组成:
    属性---变量:状态,静态的
        var c = 12;//变量:是自由自在的;
        arr.c = 3;//而属性:是属于一个对象的。
    方法---函数:过程,动态的
        function show() {//函数,谁都不属于,自由自在
            console.log("函数");
        }
    
        arr.fn = function () {//方法:因为他属于一个对象
            console.log("方法");
        }    

    3.this

    this:是当前的方法属于谁,(全局函数是window的方法)

        function show() {
            console.log(this);
        }
        show();//window
        // show实际是window上的一个方法。全局的函数,本就是属于window的

     补充,window:全局函数是window的方法:上面的全局函数等价于:

        window.show = function () {
            console.log(this);
        }
        window.show();//window

    4.了解工厂方式来构造对象:

    工厂方式来构造对象:最简单,最原始。
    缺点:1,没有new;2,每个对象都有一套自己的函数,浪费资源;

    理解工厂函数:
    1,原料;
    2,加工;
    3,出厂
        function creatPerson2(name,sex) {//构造函数:用来构造一个对象
            var obj = new Object();//第一步,创建空白对象(原料)
            obj.name = name;//第二部,加工
            obj.sex = sex;
            obj.showName = function () {
                console.log(this.name);
            }
            obj.showsex = function () {
                console.log(this.sex);
            }
            return obj;//返回(出厂)
        }
        var p1 = creatPerson2("22","33");//没有new的解决方案;
        var p2 = creatPerson2("55","44");//没有new的解决方案;
        p1.showName();
        p1.showsex();
        p2.showName();
        p2.showsex();
        console.log(p1.showName==p2.showName);//flase,每个对象都有一套自己的函数,浪费资源;
        console.log(p1.showsex==p2.showsex);//flase,每个对象都有一套自己的函数,浪费资源;

    5,理解new

    创建一个新的对象。

        //一,全局函数是window的一个方法
        function show() {
            console.log(this)
        }
        show()//window
        new show();//show,新创建的一个对象

    通过var this=new Object();自动创建,来给函数添加new,解决工厂方式的第一个缺点:

        function creatPerson2(name,sex) {//构造函数:用来构造一个对象
            //假象的系统内部工作流程;
            // var this=new Object();自动创建;
            this.name = name;//第二部,加工
            this.sex = sex;
            this.showName = function () {
                console.log(this.name);
            }
            this.showsex = function () {
                console.log(this.sex);
            }
            //假象的系统内部工作流程;
            //return this;自动返回
        }
        var p1 = new creatPerson2("22","33");//有new了
        var p2 = new creatPerson2("55","44");//有new了
        p1.showName();
        p1.showsex();
        p2.showName();
        p2.showsex();
        console.log(p1.showName==p2.showName);//flase,每个对象都有一套自己的函数,浪费资源;
        console.log(p1.showsex==p2.showsex);//flase,每个对象都有一套自己的函数,浪费资源;

    6. prototype(原型):

    原型的重要的功能(应用):可以扩展系统对象,给一类元素添加方法和属性。ex:

        Array.prototype.sum= function () {
            var result = 0;
            var i = 0;
            for(i = 0;i<this.length;i++){
                result+=this[i];
            }
            return result;
        }
    
        var arr1 = new Array(1,2,3,4);
        var arr2 = new Array(1,1,1,1);
        console.log(arr1.sum());
        console.log(arr2.sum());
        console.log(arr1.sum == arr2.sum);//true;

    理解类和对象:

        var arr = new Array(1,2,3,4);
        //Array :类  ,不具备实际的功能,只能用来构造对象;
        //arr : 对象  ,真正有功能的,被类给构造出来的;
        Array.prototype.sum = function () {
    
        }
        //给string添加方法
        String.prototype.trim = function () {
            return this.replace(/^s+|s+$/g,'');//去除头尾的空格
        }
        var str = '  abc  fljf   djlfjdl ljjd  ';
        console.log('('+str.trim()+')');

    最后,构造函数-混合法

        function CreatPerson2(name,sex) {//构造函数:用来构造一个对象
            //假象的系统内部工作流程;
            // var this=new Object();自动创建;
            this.name = name;//第二部,加工
            this.sex = sex;
            //假象的系统内部工作流程;
            //return this;自动返回
        }
        CreatPerson2.prototype.showName = function () {
            console.log(this.name);
        }
        CreatPerson2.prototype.showsex = function () {
            console.log(this.sex);
        }
        var p1 = new CreatPerson2("22","33");//有new了
        var p2 = new CreatPerson2("55","44");//有new了
        p1.showName();
        p1.showsex();
        p2.showName();
        p2.showsex();
        console.log(p1.showName==p2.showName)//true共用函数
        console.log(p1.showsex==p2.showsex);//true,共用函数
    总结:
    普通函数调用的时候不需要new,而构造函数调用的时候需要用到new
    ex :var p1 = new CreatPerson2("22","33");

    1,用混合法来创建对象
    ---所以,为了区别普通函数和构造函数,我们需要把构造函数的首字母大写;
    系统也是这样,比如:new Array, new Date , new Function;

    ---在构造函数里面添加的是属性。在原型里添加方法。ex:
        function CreatPerson2(name,sex) {//构造函数:用来构造一个对象
            //属性
            this.name = name;
            this.sex = sex;
        }
        //方法
        CreatPerson2.prototype.showName = function () {
            console.log(this.name);
        }
        CreatPerson2.prototype.showsex = function () {
            console.log(this.sex);
        }

    因为属性在每个对象各不相同,方法是所有对象都一样的。
    简言,不同的东西加到构造函数里,相同的东西加到原型里。


    原型的优先级

    css js
    class-----改变一类元素的样式---prototype

    行间样式---改变一个元素的样式---给一个对象加方法,ex:
        Array.prototype.a = 12;
        var arr = [1,2,3];
        console.log(arr.a);//12,只有原型
        arr.a = 5;
        console.log(arr.a);//5,既有原型,又有行间样式
        //所以给对象本身加属性,优先级最高
    
        delete arr.a;
        console.log(arr.a)//12











  • 相关阅读:
    Ubuntu16.04下安装搜狗输入法及实现中英文转换问题
    OLED的使用-4线SPI驱动
    maven的pom.xml多个仓库配置
    Eclipse快捷键大全
    ubuntu18安装docker
    运行docker大致流程
    docker常用命令
    使用webhooks进行代码的自动化部署
    springboot整合dubbo+zookeeper最新详细
    那些好用到手软的软件和网站
  • 原文地址:https://www.cnblogs.com/wang715100018066/p/6039425.html
Copyright © 2011-2022 走看看