欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javascript面向对象习题答案

程序员文章站 2023-04-07 22:04:42
第二章 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

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

2

2.1

    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

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

3

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

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');