JavaScript面向对象编程指南(第2版) pdf

JavaScript面向对象编程指南(第2版)

内容简介

语言是一种具有高度表达能力的、基于原型特性的、很好灵活的面向对象程序设计语言。本书着重于介绍在面向对象方面的特性,以为您展示如何去构建强健的、可维护的、功能强大的应用程序及程序库。

本书是《面向对象编程指南》的第二版,全书包括8章和4个附录。依次介绍了的发展历史、基础性话题(变量、数据类型、数组、循环以及条件表达式)、函数、对象、原型、继承的实现、BOM和DOM等。附录部分包括了学习编程常用的参考资源。尤其值得一提的是,本书作者是设计模式方面的专家,他在本书第8章中介绍了几种常用的编程模式,这也成为他的另一本重要著作《模式》(Patterns)奠定了基础。

作者简介

Stoyan Stefanov,Facebook公司工程师、作家、演说家。他经常会在博客上与一些相关会议中就Web开发话题发表独到见解。他还运营着其他一些网站。Stoyan曾在Yahoo!公司任职,担任YSlow2.0架构师职务,并且是图像优化工具Ssh.it的作者。

Kumar Chetan Sharma,原本一直致力于成为一个电子工程师,并梦想着打造一个优选音响系统。但由于一次偶然的机会,他得到了一份与HTML相关的兼职,然后自然地学习了CSS和,从此便一发不可收拾。要知道在那个年代,基本上还只能用来验证表单和制等

目录

第一章面向对象的1
1.1回顾历史2
1.2浏览器的战争与复兴3
1.3分析现状4
1.4展望未来5
1.5ECMAScript56
1.6面向对象的程序设计6
1.6.1对象7
1.6.2类8
1.6.3封装8
1.聚合9
1.6.5继承9
1.6.6多态10
1.7OOP小结10
1.8训练环境设置11
1.8.1WebKit所附带的Web审查工具11
1.8.2Mac上的Core12
1.8.3更多控制台13
1.9本章小结15
……

感悟与笔记

一、对象

1.1 获取属性值的方式

water = { down: false } console.log(water.down) // false console.log(water['down']) // false 

1.2 获取动态生成的属性的值

var type = 'down'
console.log(water[type]) // false 

二、数组

2.1 检测是否为数组

typeof([1,2]) // object Array.isArray([1,2]) // true Object.prototype.toString.call([1,2]) // [object Array] Array.isArray(Array.prototype) // true Object.prototype.toString.call(Array.prototype) // [object Array] 

2.2 增加数组长度导致未赋值的位置为undefined

减少数组长度则会裁去多余的值。

var x = [1,2]; x.length = 7; console.log(x); // [1, 2, undefined × 5] x.length = 1; console.log(x); // [1]

2.3 用闭包实现简易迭代器

var next = setup([3,3,9]); function setup(x){ var i = 0; return function(){ console.log(x[i++]);
  }
}
next(); // 3 next(); // 3 next(); // 9 next(); // undefined 

三、作用域

3.1 函数作用域(局部变量)

不能在函数体外直接访问函数内变量。

function water() { var direction = 'down' } console.log(direction) // Uncaught ReferenceError: direction is not defined 

3.2 不存在块级作用域

for、if等代码块中的变量不是局部变量。

if(water){ var down = true } console.log(down) // true 

3.3 变量泄露

函数体内的变量未声明,会在函数第一次执行的时候泄露成全局变量。

function water() {
  direction = 'down' }
water() // 执行函数 console.log(direction) // down 

3.4 变量提升

已声明的变量名会提升至顶部,值不会提升。

var down = true function water() { // 变量提升覆盖了外部down,由于值没有提升,所以为undefined console.log(down) // undefined var down = false // false console.log(down)
}
water()

3.5 临时作用域

call和apply借用另一个对象的方法,提高代码复用
第一个参数为this的指向,第二个参数为传入的参数,apply传入数组
构造函数不使用new this的值会指向window 

四、闭包

4.1 操作闭包中的值

var nature = (function() { var water = {}
  water.down = false water.get = function(type) { return water[type]
  }
  water.set = function(type,val) {
	water[type] = val return typeof(val) === 'boolean' ? true : false } return { getWater: water.get, setWater: water.set
  }
})() console.log(nature.getWater('down')) // false console.log(nature.setWater('down',true)) // true 

五、事件监听

var event = { add: function ( dom,type,func ) { if(window.addEventListener){
      dom.addEventListener( type,func,false )
    } // 兼容IE9以下 else if(document.attachEvent) {
      dom.attachEvent('on' + type,func)
    } else {
      dom['on' + type] = func
    }
  }, del: function ( dom,type,func ) { if(window.addEventListener){
      dom.removeEventListener( type,func,false )
    } else if(document.attachEvent) {
      dom.detachEvent('on' + type,func)
    } else {
      dom['on' + type] = null }
  }
} var f = function(){ console.log('event received')
}
event.add(document.body,'click',f)
event.del(document.body,'click',f)

六、类型检测

6.1 常用类型

typeof(1) // "number" number/boolean/string/undefined/object/function 

6.2 继承检测

function Water (name,status) { this.name = name this.status = status
} var seaWater = new Water('sea','warm')
seaWater instanceof Water // true 

6.3 NaN和isFinite检测

NaN不等于NaN,检测需要使用isNaN函数。

NaN === NaN // false isNaN(NaN) // true 

七、类型转换

7.1 转为整形

parseInt和parseFloat碰到第一个异常字符就会终止。

console.log(parseInt(66.5t))  // 66.5 console.log(parseInt(t66.5t))  // NaN

7.2 null和undefined

数值超出范围则显示Infinity。

console.log(1*undefined) // NaN console.log(1*null) // 0 

八、URL编码

8.1 编码

var src = "http://www.cnblogs.com/bergwhite/p/6657943.html" var srcURI = encodeURI(src)  // "http://www.cnblogs.com/bergwhite/p/6657943.html" var srcURICom = encodeURIComponent(src)  // "http%3A%2F%2Fwww.cnblogs.com%2Fbergwhite%2Fp%2F6657943.html" 

8.2 解码

decodeURI(srcURI)  // "http://www.cnblogs.com/bergwhite/p/6657943.html"
decodeURIComponent(srcURI)  // "http://www.cnblogs.com/bergwhite/p/6657943.html" 

九、JSON格式

9.1 转为JSON格式

var water = { down: false } var waterJSON = JSON.stringify(water) // "{"down":false}" 

9.2 转为对象

JSON.parse(waterJSON) // Object {down: false}

十、兼容性问题

parseInt(09) // ES5中默认不转换八进制,ES3会默认作为八进制 parseInt(09,10)  // 当值为日期的时候,作为十进制处理

会员免费下载

链接:https://pan.baidu.com/s/1g-SG9QIjZmXThdYPT4oafA

提取码: ****** 查看

¥69/年 开通VIP会员

成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。

资源标签点击标签可查看对应分类的资源

JavaScript

资源推荐

免费 图解数据结构:使用Java

C++ 程序设计语言:第4部分 标准库(原书第4版)

C++编程思想(两卷合订本)

CSS世界

JavaScript DOM编程艺术(第2版)

C++ Primer Plus(第6版) 中文版

Vue.js快速入门

Java编程思想(第4版) [thinking in java]

Copyright © 2021-2022 知识猫. All Rights Reserved.