1. 程式人生 > >2017年暑期前端實習-阿里程式設計題

2017年暑期前端實習-阿里程式設計題

(使用物件方式實現通訊錄使用者增加、展現及刪除功能)

要求

請利用面向物件的思想實現一個通訊錄功能:通訊錄包含n個人的聯絡方式,每個聯絡人資訊包含3個欄位:姓名,郵件和電話號碼;實現聯絡人資訊的錄入、展現和刪除功能,其中在錄入的時候要求姓名不能為空,郵箱和電話號碼不限,資料可以重複。

備註:
1、必須使用面向物件的方式實現,否者不給分
2、不能借助第三方庫,需用原生程式碼實現
3、錄入時郵箱和電話號碼這2個欄位需有基本的格式驗證

已給出的程式碼塊

已知以下程式碼結構,請在答題框編寫完整的Script程式碼:

<!DOCTYPE html>
<html
>
<head> <meta charset="utf-8"> <title>javaScript實現一個通訊錄功能</title> <style type="text/css"> ul li{list-style:none;display:block;text-align:left;} .record-head span{display:inline-block;margin-top:10px;margin-left:35px;} ul
li span{display:inline-block;margin-top:5px;margin-right:35px;} <!--ul li span樣式是我自己新增的,為了頁面美觀--->
</style> <script type="text/javascript"> function contact(){ //add code1 } Contact.prototype=function(){ //add code2 } Contract.prototype.constructor = Contact; //code here3
new contact();
</script> </head> <body> <div id="J_container"> <div class="record-head"> <span>姓名</span> <span>郵箱</span> <span>電話號碼</span> <span>操作</span> </div> //展示新增的聯絡人資訊 <ul id="J_List"> </ul> <form action="#"> <input type="text" name="name" class="J_UserInput" placeholder="姓名" /> <input type="text" name="email" class="J_UserInput" placeholder="郵箱" /> <input type="text" name="phone" class="J_UserInput" placeholder="電話號碼" /> <button id="J_AddBtn" >新增</button> </form> </div> </body> </html>

面向過程方式實現

 window.onload=function(){
           var oBtn=document.getElementById("J_AddBtn");
           oBtn.setAttribute("type","button");//阻止form中普通分button也要submit表格,將其type設定為button
           oBtn.onclick=function(){
              var ul=document.getElementById("J_List");
              var userName=document.querySelectorAll('.J_UserInput')[0].value;
              var userEamil=document.querySelectorAll(".J_UserInput")[1].value;
              var userPhone=document.querySelectorAll(".J_UserInput")[2].value;
              var emailReg=/^(\w-*\.*)[email protected](\w-?)+(\.\w{2,})+$/;
              var phoneReg=/^1\d{10}$/;    
              var phoneReg2 = /^0\d{2,3}-?\d{7,8}$/;   //電話正則匹配座機號碼

              if(userName!="" && emailReg.test(userEamil) && (phoneReg.test(userPhone) || phoneReg2.test(userPhone))){            
               //建立li標籤,包含顯示姓名,郵箱,電話號碼及刪除按鈕 
               //為姓名或郵箱等新增span標籤,好設定樣式
                //新增刪除按鈕及設定刪除按鈕的樣式及新增點選事件
               ul.innerHTML+="<li class=\"newLi\"><span>"
                           +userName+"<\/span><span>"+userEamil+"<\/span><span>"+userPhone
                           +"<\/span><span><input type=\"button\" value=\"刪除\" onclick=\"this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode)\" \/><\/span><\/li>";
               }
               else{
                   if(userName==""){
                   alert("姓名不能為空");
                   }
                    else if(emailReg.test(userEamil)==false){
                    alert("郵箱格式錯誤");
                    }
                    else if(phoneReg.test(userPhone)==false && phoneReg2.test(userPhone)==false){
                    alert("電話號碼格式錯誤");
                    }
               }
           }
          }

將面向過程的實現方式改成面向物件的形式,將變數改為物件的屬性,函式改為物件的方法,需要注意的是this指標。

需要注意的幾點:**
1.不能有函式巢狀 2.變數改為屬性 3.函式改為方法 4.this的指向問題。

面向物件實現方式

//code here1程式碼塊

 function contact(){
       var _this=this;
        this.oBtn=document.getElementById('J_AddBtn');
        this.oBtn.type='button';
        this.emailReg=/^(\w-*\.*)[email protected](\w-?)+(\.\w{2,})+$/;
        this.phoneReg=/^1\d{10}$/; 
        //電話正則匹配座機號碼
        this.phoneReg2 = /^0\d{2,3}-?\d{7,8}$/;     
        this.oBtn.onclick = function(){
         _this.clicks(this);
         }
      }

//code here3程式碼塊

//code here3編寫完整的Script程式碼:

contact.prototype.clicks=function(){
            var _this=this;
           this.userName = document.querySelectorAll('.J_UserInput')[0].value;
this.userEamil=document.querySelectorAll(".J_UserInput")[1].value;
this.userPhone=document.querySelectorAll(".J_UserInput")[2].value;
//alert(_this.userName + "---" + _this.userEamil + "---" + _this.userPhone);
if(_this.userName!="" && _this.emailReg.test(_this.userEamil) && (_this.phoneReg.test(_this.userPhone) || _this.phoneReg2.test(_this.userPhone))){            
document.getElementById("J_List").innerHTML+="<li class=\"newLi\"><span>" +_this.userName+"<\/span><span>"+_this.userEamil+"<\/span><span>"+_this.userPhone+"<\/span><span><input type=\"button\" value=\"刪除\"onclick=\"this.parentNode.parentNode.parentNode
.removeChild(this.parentNode.parentNode)\" \/><\/span><\/li>";
               }
    else{
        if(_this.userName==""){
            alert("姓名不能為空");
            }
        else if(_this.emailReg.test(_this.userEamil)==false){
          alert("郵箱格式錯誤");
           }
    else if(_this.phoneReg.test(_this.userPhone)==false && _this.phoneReg2.test(_this.userPhone)==false){
                    alert("電話號碼格式錯誤");
                    }
               }
          }
           //呼叫contact()
        window.onload=function(){
          new contact();
         }

頁面樣式

這裡寫圖片描述

點選新增按鈕後結果如下圖所示

這裡寫圖片描述

點選刪除按鈕能滿足刪除功能,能滿足通訊錄的增加、展現以及刪除功能。

Contact.prototype=function(){
//add code2
}
//add code2程式碼塊需新增什麼,還不是很清楚,歡迎各路大神留言、交流學習!

重點:面向過程—>面向物件

之前在未學習面向物件時,我們都是面向過程程式設計的。它的優點就是簡單,明瞭,現在學習把面向過程的通訊錄新增、展現和刪除功能改寫成面向物件的方式。

此次筆試時間倉促,沒能及時完成,線下仔細研究實現,從而對面向物件程式設計有了一定的瞭解!