javascript面向对象习题答案
第二章
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的跨浏览器事件工具集(或对象集),其中应该包含以下方法。
- addListener(element, event_name, callback) —其中的 element参数也可以是一个元素数组。
- removeListener(element, event_name, callback)。
- getEvent(event)—对于 IE 的早期版本,我们可以通过检查 window.event 属性来实现。
- getTarget(event)。
- stopPropagation(event)。
- 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面向对象习题答案的更多相关文章
- JavaScript学习总结(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...
- JavaScript面向对象(三)——继承与闭包、JS实现继承的三种方式
前 言 JRedu 在之前的两篇博客中,我们详细探讨了JavaScript OOP中的各种知识点(JS OOP基础与JS 中This指向详解 . 成员属性.静态属性.原型属性与JS原型链).今天 ...
- javascript(面向对象,作用域,闭包,设计模式等)
javascript(面向对象,作用域,闭包,设计模式等) 1. 常用js类定义的方法有哪些? 参考答案:主要有构造函数原型和对象创建两种方法.原型法是通用老方法,对象创建是ES5推荐使用的方法.目前 ...
- JavaScript学习总结(四)——this、原型链、javascript面向对象
一.this 在JavaScript中this表示:谁调用当前函数this就指向谁,不知道调用者时this指向window. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是 ...
- JavaScript 面向对象编程(三):非构造函数对象的继承
JavaScript 面向对象编程(三):非构造函数对象的继承 一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese ...
- 深入理解 JavaScript 面向对象
我们在学习编程时,避免不了会接触一个概念,叫:面向对象编程(Object-oriented programming,缩写:oop) (不是搞对象那个对象哈),其实我们的编程方式,不止有面向对象,还有 ...
- 全方位深入理解JavaScript面向对象
JavaScript面向对象程序设计 转载:https://blog.csdn.net/lihangxiaoji/article/details/79753473#72__871 本文会碰到的知识点: ...
- JavaScript学习笔记(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...
- Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
随机推荐
- linux服务器 jboss-7安装
jBoss简介 JBoss是一个运行EJB的J2EE应用服务器.它是开放源代码的项目,遵循最新的J2EE规范.从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操 ...
- AI - TensorFlow - 示例03:基本回归
基本回归 回归(Regression):https://www.tensorflow.org/tutorials/keras/basic_regression 主要步骤:数据部分 获取数据(Get t ...
- hive新建分区表
hive新建分区表语句如下: create table table_name (col1_name string comment '备注1', col2_name string comment '备注 ...
- 【Python3爬虫】最新的模拟登录新浪微博教程
一.写在前面 首先呢,由于之前重装系统,又要重新配置环境,然后还有一些别的事,导致我一直没有写爬虫了,不过现在又可以继续写了. 然后我这次说的模拟登录新浪微博呢,不是使用Selenium模拟浏览器操作 ...
- C#如何根据类的名词创建类的实例
这个大概分为两种情况:1-在同一程序集访问该类:2-在不同的程序集访问 A:同一程序集,使用微软的创建对象的类:System.Activator: 先通过类名,获取到类型,在使用用于创建本地或远程对象 ...
- 解决ruby安装后无法添加淘宝gem源------------学习记录
使用sass ,需要安装ruby,会建议移除gem源,添加淘宝的gem源,但是淘宝的镜像源已经停止维护啦!!用https://gems.ruby-china.com 代替即可. 操作如下: 1)删除原 ...
- Web前端-Ajax基础技术(下)
Web前端-Ajax基础技术(下) 你要明白ajax是什么,怎么使用? ajax,web程序是将信息放入公共的服务器,让所有网络用户可以通过浏览器进行访问. 浏览器发送请求,获取服务器的数据: 地址栏 ...
- HTML 练习实现遮罩层
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关于web资金系统提现安全保护,防止极快的重复并发请求导致重复提现的解决思路
关于WEB金融系统中的提现安全问题很多人没有深入思想,导致有漏洞,常常会遇到有些人遇到被攻击到导资金损失的麻烦, 其实要彻底解决重复并发请求 导致重复提现问题,是需要花点心思的,并没有看起来的 ...
- Kafka Ecosystem(Kafka生态)
http://kafka.apache.org/documentation/#ecosystem https://cwiki.apache.org/confluence/display/KAFKA/E ...