javascript面向對象習題答案

来源:https://www.cnblogs.com/ppxyq/archive/2019/03/22/10577102.html
-Advertisement-
Play Games

第二章 1.如果我們在控制臺中執行下列語句,結果分別是什麼?為什麼? 2.執行下麵的語句後,v 的值會是什麼? var v = v || 10; 如果將v 分別設置為100、0、null,結果又將是什麼? 100, 10, 10 3.編寫一個列印乘法口訣表的腳本程式。提示:使用嵌套迴圈來實現。 第三 ...


第二章

1.如果我們在控制臺中執行下列語句,結果分別是什麼?為什麼?

var a; typeof a;   undefined
> var s = '1s'; s++;   NaN
> !!"false";   true
> !!undefined;   false
> typeof -Infinity;   number
> 10 % "0";    NaN
> undefined == null;    true
> false === "";     false
> typeof "2E+2";    string
> a = 3e+3; a++;    3000

2.執行下麵的語句後,v 的值會是什麼?

var v = v || 10; 如果將v 分別設置為100、0、null,結果又將是什麼?

100, 10, 10

3.編寫一個列印乘法口訣表的腳本程式。提示:使用嵌套迴圈來實現。

for (let i = 1; i < 10; i++) {
    for (let j = i; j < 10; j++) {
      console.log(i + '*' + j + '= '+ i*j);
    }
  }


第三章

1.編寫一個將十六進位值轉換為顏色的函數,以藍色為例,#0000FF 應被表示成 rgb(0,0,255)的形式。然後將函數命名為getRGB(),並用以下代碼進行測試。提示: 可以將字元串視為數組,這個數組的元素為字元。

function getRGB(color) {
  let color1 = color.replace(/#/g, '');
  console.log(color1)
  let a = parseInt(color1.substring(0, 2), 16);
  let b = parseInt(color1.substring(2, 4), 16);
  let c = parseInt(color1.substring(4), 16);
  return 'rgb(' + a + ',' + b + ',' + c + ')';
}
 

第四章答案

4. 在String()構造函數不存在的情況下自定義一個MyString()的構造器函數。記住,由於String()不存在,因此您在寫構造器函數時不能使用任何屬於內建String對象的方法和屬性。並且要讓您所創建的對象通過以下測試:

var s = new MyString("hello");
s.length;  //5

s[0];  //"h"

s.toString();  //"hello"

s.valueOf();  //"hello"

s.charAt(1);  //"e"

s.charAt("2");  //"l"

s.charAt("e");  //"h"

s.concat(" world!");  //"hello world!"

s.slice(1,3);  //"el"

s.slice(0,-1);  //"hell"

s.split("e");  //["h","llo"]

s.split("l");  //["he","","o"]

answer

function MyString(pstr){
    this.str=pstr.toString();
    this.length=this.str.length;

    for(var i=0;i<this.length;i++){
        this[i]=this.str[i];
    }

    this.toString=function (){
        return this.str;
    };

    this.valueOf=function (){
        return this.toString();
    };
    this.charAt=function(index){
        index=parseInt(index,10);
        index=isNaN(index)?0:index;
        return this[index];
    };
    this.concat=function(concatStr){
        return this.str+concatStr;
    };
    this.slice=function(startIndex,endIndex){
        while(startIndex<0){
            startIndex=startIndex+this.length;
        }
        while(endIndex<0){
            endIndex=endIndex+this.length;
        }
        if(endIndex<=startIndex){
            return "";
        }
        var resultStr="";
        for(var i=startIndex;i<endIndex;i++){
            resultStr+=this[i];
        }
        return resultStr;
    };
    this.split=function(s){
        var resultArr=[];
        var tempStr="";
        for(var i=0;i<this.length;i++){
            if(this[i]===s){
                resultArr.push(tempStr);
                tempStr="";
            }else{
                tempStr+=this[i];
            }
        }
        resultArr.push(tempStr);
        return resultArr;
    };
    this.reverse=function(){
        var tempArr=[];
        var i;
        for(i=0;i<this.length;i++){
            tempArr[i]=this[i];
        }
        tempArr.reverse();
        this.str=tempArr.join("");
        for(i=0;i<this.length;i++){
            this[i]=tempArr[i];
        }
    };
}

6.在Array()構造器以及相關的數組文本標識法都不存在的情況下,自定義一個類似的MyArray()構造器,並令其通過以下測試:

var a = new MyArray(1,2,3,"test");
a.toString();
//"1,2,3,test"

a.length;
//4

a[a.length-1];
//"test"

a.push("boo");
//5

a.toString();
//"1,2,3,test,boo"

a.pop();
//boo

a.toString();
//"1,2,3,test"

a.join(",");
//"1,2,3,test"

a.join(" isn\'t");
//1 isn't 2 isn't 3 isn't test"

answer

function MyArray(){
        this.length=arguments.length;
        for(var i=0;i<this.length;i++){
            this[i]=arguments[i];
        }

        this.toString=function(){
            var resultStr="";
            for(var i=0;i<this.length;i++){
                if(i===this.length-1){
                    resultStr+=this[i].toString();
                }else{
                    resultStr+=this[i].toString()+",";
                }
            }
            return resultStr;
        };
        this.push=function(obj){
            this[this.length]=obj;
            this.length++;
            return this.length;
        };
        this.pop=function(){
            if(this.length===0){
                return null;
            }
            result=this[this.length-1];
            this[this.length-1]=undefined;
            this.length--;
            return result;
        };
        this.join=function(str){
            var resultStr="";
            for(var i=0;i<this.length;i++){
                if(i===this.length-1){
                    resultStr+=this[i].toString();
                }else{
                    resultStr+=this[i].toString()+str;
                }
            }
            return resultStr;
        }
    }

 

第七章

1.BOM

作為 BOM 的練習來說,我們可以試著寫出許多錯誤的、富有騷擾性的、對用戶非常 不友好的代碼,以及所有非常 Web 1.0 的東西。例如晃動的瀏覽器視窗。請試著令瀏覽器 彈出一個 200 × 200 的視窗,然後將其大小漸變成 400 × 400,接著將視窗上下左右不停移 動,造成地震效果。為了實現這種效果,我們需要 move*()函數,其中需要一次或多次調用 setInterval(),最後可能還需要 setTimeout()及 clearInterval()來令其停止操作。 或者我們可以更簡單一些,將當前日期時間通過 document.title 實時顯示在瀏覽器的標題欄 中,並像鐘錶一樣每秒鐘更新一次。

var win = window.open('http://www.baidu.com', 'packt', 'width=200,height=200,resizable=yes');
setTimeout(() => win.resizeTo(400, 400), 1000);

2. DOM

2.1 換一種不同的方式來實現 walkDOM()方法,以回調函數參數的形式來代替console.log()硬編碼。

    function walkDOM(n, callback) {
      do {
        callback(n);
        if(n.hasChildNodes()) {
          walkDOM(n.lastChild, callback);
        }
      } while (n = n.previousSibling);
    }

    function callback(n) {
      console.log(n)
    }

    walkDOM(document.documentElement, callback);

2.2 創建一個叫做include()的函數,該函數可以按需將外部腳本引入當前頁面。你可以首先動態創建一個新的<script>標簽,然後設置其 src 屬性,再將它插入到<head>標簽末端。該函數應通過如下測試:

> include('somescript.js');

function include(src) {
  var script = document.createElement('script');
  script.src = src;
  document.head.appendChild(script);
}
include('somescript.js');

3 事件

創建一個叫做myevent的跨瀏覽器事件工具集(或對象集),其中應該包含以下方法。

  1. addListener(element, event_name, callback) —其中的 element參數也可以是一個元素數組。
  2. removeListener(element, event_name, callback)。
  3. getEvent(event)—對於 IE 的早期版本,我們可以通過檢查 window.event 屬性來實現。
  4. getTarget(event)。
  5. stopPropagation(event)。
  6. preventDefault(event)。

其用例如下:

function myCallback(e) {
e = myevent.getEvent(e);
alert(myevent.getTarget(e).href);
myevent.stopPropagation(e);
myevent.preventDefault(e);
}
myevent.addListener(document.links, 'click', myCallback);

執行這段示例代碼應該會使該文檔中所有的鏈接失效,只不過,它們在被單擊時會彈出一個 alert()視窗,以顯示其 href 屬性。 創建一個以像素定位的<div>元素,坐標為 x=100 px, y=100 px。然後編寫代碼使<div> 元素能按照以下按鍵 J(左)、 K(右)、 M(下)、 I(上)或對應方向鍵的操作方式在頁面 中移動。並且,在編寫過程中可以重用您剛剛實現的事件工具集。

let myevent = {
      addListener(element, event_name, callback) {
        if (element.length > 1) {
          for (let item of element) {
            addEvent(item, event_name, callback);
          }
        } else {
          addEvent(element, event_name, callback);
        }

        function addEvent(element, name, callback) {
          if (element.addEventListener) {
            element.addEventListener(event_name, callback, false);
          } else if (element.attachEvent) {
            element.attachEvent(event_name, callback, false);
          } else {
            element.event_name = callback;
          }
        }
      },
      removeListener(element, event_name, callback) {
        if (element.removeEventListener) {
          element.removeEventListener(event_name, callback, false);
        } else if (element.detachEvent) {
          element.detachEvent(event_name, callback, false);
        }
      },
      getEvent(event) {
        event = event || window.event;
        return event;
      },
      getTarget(event) {
        const target = event.target || event.srcElement;
        return target;
      },
      stopPropagation(event) {
        event.stopPropagation() || (event.cancelBubble = true);
      },
      preventDefault(event) {
        event.preventDefault() || (event.returnValue = false);
      }
    }

    function myCallback(e) {
      e = myevent.getEvent(e);
      alert(myevent.getTarget(e).href);
      myevent.stopPropagation(e);
      myevent.preventDefault(e);
    }

    myevent.addListener(document.links, 'click', myCallback);

4 XMLHttpRequest 對象

創建一個名為ajax的XHR工具集(或對象集),其示例用法如下:

function myCallback(xhr) {
alert(xhr.responseText);
}
ajax.request('somefile.txt', 'get', myCallback);
ajax.request('script.php', 'post', myCallback,
'first=John&last=Smith');

answer

let ajax = {
  request(url, method, callbak, params) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = (function (myxhr) {
      return function() {
        if (myxhr.readyState === 4 && myxhr.status === 200) {
          callbak(myxhr);
        }
      }
    })(xhr);
    xhr.open(method, url, true);
    xhr.send(params || '');
  }
}

function myCallback(xhr) {
  alert(xhr.responseText);
}
ajax.request('somefile.txt', 'get', myCallback);
ajax.request('script.php', 'post', myCallback, 'first=John&last=Smith');
 
 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • transform 變形屬性屬性:translate 平移,rotate 旋轉, scale 縮放,skew 傾斜 ◆ translate :指定對象的2D平移第一個參數對應X軸,第二參數對應Y軸;如果第二個參數未提供,則預設為0;translate(10px,10px)X軸 往左邊移動 對應第一個 ...
  • 頭部... 內容內容內容內容內容內容 底部。。。 .HolyGrail { display: flex; min-height: 100vh; flex-direction: column; } header, footer { height:80px; line-height: 80px; tex... ...
  • 原文地址:http://wushaobin.top/2019/03/15/webpackPlugin/ 什麼是Plugin? 在 "Webpack學習-工作原理(上)" 一文中我們就已經介紹了 的基本概念,同時知道了webpack其實很像一條生產線,要經過一系列處理流程後才能將源文件轉換成我們理想的 ...
  • 秒轉換成年月日時分秒 秒轉換成年月日時分秒 複製文本 複製文本 <script type="text/javascript"> function copy() { var url=document.getElementById("textID"); // 獲取要操作的DOM Url2.select( ...
  • import axios from 'axios' let CdnPath = {} CdnPath.install = function (Vue, options) { Vue.prototype.$_cdnDomain = function () { if (process.env.NODE_... ...
  • HTML基本結構: 選擇圖片 預覽圖: 立即提交 Java... ...
  • 前端路由 看到這裡可能有朋友有疑惑了,前端也有路由嗎?這些難道不應該是在後端部分操作的嗎?確實是這樣,但是現在前後端分離後,加上現在的前端框架的實用性,為的就是均衡前後端的工作量,所以在前端也有了路由,減輕了伺服器對這方面的判斷,在前端做好路由分發之後,後端就只需要寫API介面了,更著重於數據... ...
  • 鏈式編程 多行代碼合併成一行代碼,前提要認清此行代碼返回的是不是對象.是對象才能進行鏈式編程 .html(‘val’).text(‘val’).css()鏈式編程,隱式迭代 鏈式編程註意:$(‘div’).html(‘設置值’).val(‘設置值’);這樣可以,但是$(‘div’).html().t ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...