第二章

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

javascript面向对象习题答案的更多相关文章

  1. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  2. JavaScript面向对象(三)——继承与闭包、JS实现继承的三种方式

      前  言 JRedu 在之前的两篇博客中,我们详细探讨了JavaScript OOP中的各种知识点(JS OOP基础与JS 中This指向详解 . 成员属性.静态属性.原型属性与JS原型链).今天 ...

  3. javascript(面向对象,作用域,闭包,设计模式等)

    javascript(面向对象,作用域,闭包,设计模式等) 1. 常用js类定义的方法有哪些? 参考答案:主要有构造函数原型和对象创建两种方法.原型法是通用老方法,对象创建是ES5推荐使用的方法.目前 ...

  4. JavaScript学习总结(四)——this、原型链、javascript面向对象

    一.this 在JavaScript中this表示:谁调用当前函数this就指向谁,不知道调用者时this指向window. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是 ...

  5. JavaScript 面向对象编程(三):非构造函数对象的继承

    JavaScript 面向对象编程(三):非构造函数对象的继承 一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese ...

  6. 深入理解 JavaScript 面向对象

    我们在学习编程时,避免不了会接触一个概念,叫:面向对象编程(Object-oriented programming,缩写:oop) (不是搞对象那个对象哈),其实我们的编程方式,不止有面向对象,还有 ...

  7. 全方位深入理解JavaScript面向对象

    JavaScript面向对象程序设计 转载:https://blog.csdn.net/lihangxiaoji/article/details/79753473#72__871 本文会碰到的知识点: ...

  8. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  9. Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

随机推荐

  1. 漏洞经验分享丨Java审计之XXE(下)

    上篇内容我们介绍了XXE的基础概念和审计函数的相关内容,今天我们将继续分享Blind XXE与OOB-XXE的知识点以及XXE防御方法,希望对大家的学习有所帮助! 上期回顾  ◀漏洞经验分享丨Java ...

  2. 3.python词云图的生成

    安装库 pip install jieba wordcloud matplotlib 准备 txt文本 字体(simhei.ttf) 词云背景图片 代码 import matplotlib.pyplo ...

  3. redis测试实践

    最近测试服务端的时候,接触到了redis,之前也看过,但不系统,借着这次实践,记录一下. 一.写在前面 Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的 ...

  4. Android中一个经典理解误区的剖析

    今天,在Q群中有网友(@广州-包晴天)发出了网上的一个相对经典的问题,问题具体见下图. 本来是无意写此文的,但群里多个网友热情不好推却,于是,撰此文予以分析. 从这个问题的陈述中,我们发现,提问者明显 ...

  5. ajax分页借鉴

    大家好这是我分页是用的代码希望大家可以相互交流ajax局部刷新 var pageindex = 1; var where = ""; var Pname = "" ...

  6. 高淇java300集异常机制作业

    1.以下关于异常的代码的执行结果是(C ).(选择一项) 1 2 3 4 5 6 7 8 9 10 11 12 public class Test {     public static void m ...

  7. Android远程桌面助手(B1413)

    ARDC(B1413) 1.解决Android9显示黑屏问题;2.解决向导菜单显示异常问题;3.解决部分手机无法正常连接的问题;4.切换到WiFi连接时,增加显示NetworkID;5.更新图片压缩的 ...

  8. 关于OSError: [WinError 10038] 在一个非套接字上尝试了一个操作。

    在使用socket的时候,写了一个while循环,就报错了.结果如下: OSError: [WinError 10038] 在一个非套接字上尝试了一个操作. 代码 import socket impo ...

  9. 两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)

    背景: 上一篇:ASP.Net Core on Linux (CentOS7)共享第三方依赖库部署 已经交待了背景,这篇就省下背景了. 折腾的过程分两步: 第一步是:本机跑虚拟机部署试一下: 第二步是 ...

  10. Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!

    目录 01 简介 02 tcpdump 命令选项 03 过滤器 04 常用操作 4.1 抓取某主机的数据包 4.2 抓取某端口的数据包 4.3 抓取某网络(网段)的数据包 4.4 抓取某协议的数据包 ...