1. 程式人生 > >JavaScript面向物件程式設計和麵向過程程式設計

JavaScript面向物件程式設計和麵向過程程式設計

JavaScript程式設計中多數情況是面向過程程式設計,但有時候為了更好地封裝重用。面向物件思想來程式設計更為有用。

雖然現前端都開始流行MVC思想的js框架,但並不是說js沒用了,學好js對於學習js前端框架,jquery,等都是非常有幫助的。

好了,閒話不說,下面用一個例子,兩種寫法,來說明面向物件和麵向過程程式設計。

效果如上,一個簡簡單單的選項卡的例子。

面向過程程式設計程式碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            #div1.active{
                background-color: red;
            }
            #div1 div{    
                background: gray;
                width: 200px;
                height: 200px;
                display: none;
                border: solid black 1px;
                }
            #div1{background: yellow;}
        </style>
        <script type="text/javascript">
            var  oBtns;
            var oDivs;
            window.onload=function(){
                 var oDiv1 = document.getElementById('div1');
                 oBtns = oDiv1.getElementsByTagName('input');
                 oDivs = oDiv1.getElementsByTagName('div');
                for(var i = 0;i<oBtns.length;i++){
                    oBtns[i].index = i;
                    oBtns[i].onclick = function(){
                        for(var j = 0;j<oBtns.length;j++){
                            oBtns[j].className='';
                            oDivs[j].style.display='none';
                        }
                        this.className='active';
                        oDivs[this.index].style.display='block';
                    };
                }
            }
        </script>
    </head>
    <body>
        <div id="div1">
            <input type="button" value="xxx" />
            <input type="button" value="qqq" />
            <input type="button" value="aaa" />
            <div style="display: block;">
                111
            </div>
            <div >
                222
            </div>
            <div >
                333
            </div>
        </div>
    </body>
</html>

總結:面向過程編碼,程式碼較為簡潔,過程清楚明瞭,較容易理解。

面向物件程式設計程式碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            #div1 input.active{
                background-color: red;
            }
            #div1 div{    
                background: gray;
                width: 200px;
                height: 200px;
                display: none;
                border: solid black 1px;
                }
            #div1 input{background: yellow;}
        </style>
        <script type="text/javascript">
            
            window.onload = function(){
                new TabSwitch('div1');
            }
             function TabSwitch(id){
                 var _this = this;
                  var oDiv = document.getElementById(id);
                 this.aBtn = oDiv.getElementsByTagName('input');
                 this.aDiv = oDiv.getElementsByTagName('div');
                for(var i = 0;i<this.aBtn.length;i++){
                    this.aBtn[i].index = i;
                    this.aBtn[i].onclick = function(){
                        _this.fnClick(this);
                    };
                }
             }
            
            TabSwitch.prototype.fnClick = function(obtn){
                for(var j = 0;j<this.aBtn.length;j++){
                    this.aBtn[j].className='';
                    this.aDiv[j].style.display='none';
                }
                obtn.className='active';
                this.aDiv[obtn.index].style.display='block';
            }
        </script>
    </head>
    <body>
        <div id="div1">
            <input type="button" value="xxx" />
            <input type="button" value="qqq" />
            <input type="button" value="aaa" />
            <div style="display: block;">
                111
            </div>
            <div >
                222
            </div>
            <div >
                333
            </div>
        </div>
    </body>
</html>

總結:面向物件程式設計較不容易理解,其中this用法容易用錯。但是面向物件程式設計重用性更好,封裝更徹底。以後想使用選項卡這個功能,直接引入js檔案妥妥的。