JavaScript面向对象编程指南(第2版) pdf
内容简介
语言是一种具有高度表达能力的、基于原型特性的、很好灵活的面向对象程序设计语言。本书着重于介绍在面向对象方面的特性,以为您展示如何去构建强健的、可维护的、功能强大的应用程序及程序库。
本书是《面向对象编程指南》的第二版,全书包括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
提取码: ****** 查看
成为本站VIP会员即可无限下载。 请先点击百度网盘,看资源是否还在,不在请点击链接通知站长补资源。
资源标签点击标签可查看对应分类的资源