美文网首页
02_JS面向对象

02_JS面向对象

作者: 对方不想理你并向你抛出一个异常 | 来源:发表于2017-09-10 14:40 被阅读0次

    知识点

    • 面向对象的概念
    • 面向对象编程举例
    • 设置页面中的div和p的边框为1px solid red
    • 创建一个 div 标签, 并设置其样式, 加入页面中

    面向对象的基本概念

    面向过程和面向对象的对比

    Example 1:洗衣服

    面向过程的思维方式:
        step 1:收拾脏衣服
        step 2:打开洗衣机盖
        step 3:将脏衣服放进去
        step 4:设定洗衣程序
        step 5:开始洗衣服
        step 6:打开洗衣机盖子
        step 7:晒衣服
    
    面向对象的思维方式:
        洗衣机需要什么对象?
        女朋友    
        洗衣机
    

    在面向对象的思维方式中:我们只关心要完成事情需要的对象。

    总结:面向对象是一种解决问题的思路,一种编程思想。

    对象是什么呢?

    万物皆对象

    JavaScript中的对象是什么?

    在JavaScript中,所谓的对象,就是键值对的集合。

    比如要描述一个人,这个人有name,age,gender,体现在代码中:

    { name:"张三", age:18, gender:"Male" }
    

    比如要做一个学生管理系统,那学生就是要设计的对象,学生拥有name,age,gender,address,phone,体现在代码中:

    { name:"刘亦菲", age:18, gender:"female", address:"上海", phone:"110" }
    
    总结
    • 面向过程关注的实现功能的步骤,是如何把功能拆解后一步步的实现
    • 面向对象则是关注的实现功能的一系列的对象

    面向对象编程举例

    设置页面中的div和p的边框为1px solid red

    传统的处理办法
    // 任务需求:
    // 1> 获取div标签
    var divs = document.getElementsByTagName( 'div' );
    // 2> 遍历获取到的div标签
    for(var i = 0; i < divs.length; i++) {
        //3> 获取到每一个div元素,设置div的样式
        divs[i].style.border = "1px dotted black";
    }
    
    // 4> 获取p标签
    var ps = document.getElementsByTagName("p");
    // 5> 遍历获取到的p标签
    for(var j = 0; j < ps.length; j++) { 
        // 获取到每一个div元素 设置p标签的样式
        ps[j].style.border = "1px dotted black"; 
    }
    
    使用函数进行封装优化
    // 通过标签名字来获取页面中的元素 
    function tag(tagName) { 
        // var dvs = document.getElementsByTagName(tagName); 
        // return dvs; 
        return document.getElementsByTagName(tagName); 
    }
    
    // 封装一个设置样式的函数 
    function setStyle(arr) { 
        for(var i = 0; i < arr.length; i++) { 
            // 获取到每一个div元素 
            arr[i].style.border = "1px solid #abc"; 
        } 
    }
    var dvs = tag("div");
    var ps = tag("p");
    setStyle(dvs); 
    setStyle(ps);
    
    使用面向对象的方式
    // 更好的做法:是将功能相近的代码放到一起 
    var itcast = { 
        getEle: { 
            tag: function (tagName) { 
                return document.getElementsByTagName(tagName); 
            }, 
            id: function (idName) { 
                return document.getElementById(idName); 
            } 
        },    
        setCss: { 
            setStyle: function (arr) { 
                for(var i = 0; i < arr.length; i++) { 
                    arr[i].style.border = "1px solid #abc"; 
                } 
            }, 
            css: function() {}, 
            addClass: function() {}, 
            removeClass: function() {} 
            // ... 
        } 
        // 属性操作模块 
        // 动画模块 
        // 事件模块 
        // ... 
    };
    
    var divs = itcast.getEle.tag();
    itcast.setCss.setStyle(divs);
    

    创建一个 div 标签, 并设置其样式, 加入页面中

    传统的处理办法
    
    <script type="text/javascript">
        //创建一个 div 标签, 并设置其样式, 加入页面中
    
        //面向过程的思维方式
        //1. 创建div
        var div = document.createElement("div");
        //2. 设置div样式
        div.style.border = "1px solid #c0c0c0";
        div.style.width = "400px";
        div.style.height = "300px";
        //3. 添加div到body中去
        document.body.appendChild(div);
    </script>
    

    Jquery方式

    也是面向对象的方式

    $("body").append("<div style='border: 1px solid red; width: 400px; height: 300px;'></div>");
    
    使用面向对象的方式
    // 面向对象的方式去思考:
    // 1, 抽取对象( 名词提炼法 ): div, body
    // 2, 分析属性与方法( 动词提炼 ): 加到, 设置样式
    
    var divTag = new DivTag(); // 内部应该创建 dom 对象
    // 构造函数内部应该创建 dom 对象 div, 同时将其设置为属性
    // 需要一个 div 的构造函数
    function DivTag() {
        this.DOM = document.createElement( 'div' );
        this.__加到 = function ( node ) {
            // 需要将 this.DOM 加到 node 中
            node.appendChild( this.DOM );
        };
        this.__设置样式 = function ( name, value ) {
            // 设置 this.DOM 的样式
            this.DOM.style[ name ] = value;
        };
    }
    
    var divTag = new DivTag();
    
    divTag.__设置样式( 'border', '1px solid red' );
    divTag.__设置样式( 'width', '400px' );
    divTag.__设置样式( 'height', '100px' );
    divTag.__设置样式( 'backgroundColor', 'pink' );
    

    例:

    
    <script type="text/javascript">
        //使用函数将代码封装,使得复用性更高
    
        //使用函数封装带来的问题:
        //1.全局变量污染
        //2.代码结构不够清晰,维护不方便
    
    
        //使用对象进行封装后的优势
        //1.暴露在全局的只有一个对象名 不会造成全局变量污染
        //2.使用对象将代码进行功能模块的划分,有利于日后的维护
    
    
    
        
        //设置页面中的div和p的边框为1px solid red
        //面向过程的方式
        function tag(tagName){
            return document.getElementsByTagName(tagName);
        }
    
        function setStyle(elements){
            for (var i = 0; i < elements.length; i++) {
                var obj = elements[i];
                obj.style.border = "1px solid red";
            }
        }
        setStyle(tag("div"));
        setStyle(tag("p"));
    
        //面向对象的方式
        var MJquery = {
            //获取dom元素的方法放入一个对象中
            getElement:{
                tag: function(tagName){
                    return document.getElementsByTagName(tagName);
                },
                id: function (id) {
                    return document.getElementById(id);
                }
            },
            //设置样式的方法放入一个对象中
            setCss:{
                setStyle: function (elements) {
                    for (var i = 0; i < elements.length; i++) {
                        var obj = elements[i];
                        obj.style.border = "1px solid red";
                    }
                },
                css: function (option) {
    
                },
                addClass: function () {
    
                }
            },
            //事件处理模块
            dealEvent:{
                addEvent: function () {
    
                }
            }
        };
    </script>
    

    相关文章

      网友评论

          本文标题:02_JS面向对象

          本文链接:https://www.haomeiwen.com/subject/wpxtkxtx.html