《JavaScript语言精粹》读书笔记

第三章 对象

特性

JavaScript包含一种原型链的特性,容许对象继承另外一个对象的属性。正确的使用它能减小对象初始化时消耗的时间和内存。正则表达式

检索属性

检索JavaScript对象属性的时候,可以使用”||“运算符来填充默认值;当参试从undefined值中获取值时会致使TypeError异常,可使用“&&”运算符来避免错误。数组

var name = person.name || "vivo"
person.address // undefined
person.address.city // throw "TypeError"
person.address && person.address.city // undefined
复制代码

原型关系

原型关系是一种动态关系,若是咱们添加一个新的属性到原型中,该属性会当即对全部基于该原型建立的对象可见。bash

hasOwnProperty()

若是对象拥有独有的属性,将返回true。hasOwnProperty方法不会检查原型链上的属性。闭包

person.hasOwnProperty('name') // true
person.hasOwnProperty('constructor') // false
复制代码

delete

delete运算符能够用来删除对象的属性,它不会触及原型链中的任何对象。删除对象的属性可能会让来自原型链中的属性透视出来。app

第四章 函数

函数对象

JavaScript中的函数就是对象。对象是“名/值”对的集合并拥有一个连到原型对象的隐藏链接。对象字面量产生的对象链接到Object.prototype。函数对象链接到Function.prototype(该原型对象自己链接到Object.prototype)。
每一个函数对象在建立时也随配有一个prototype属性。它的值是一个拥有constructor属性且值即为该函数对象。函数

调用模式

每一个函数会接受到2个额外附件的参数,this与arguments。 arguments数组保存的是函数被调用时传递的参数列表。
this的值取决与调用模式:ui

  • 方法调用模式:当一个函数被保存为对象的一个属性时,称它为一个方法;方法被调用时,this被绑定到该对象。
  • 函数调用模式:当一个函数并不是一个对象的属性,它被看成一个函数调用,this被绑定到全局对象。
  • 构造器调用模式:一个函数前面带上new来调用,就会建立一个链接到该函数的prototypr成员的新对象,this被绑定到这个新对象上。
  • apply调用模式:apply方法接受两个参数,第一个为绑定给this的值,第二个为参数数组。
myObject.double = function () {
  var that = this
	var helper = function () {
		that.value = add(that.value,that.value)
	}
	helper() // 函数形式调用
}
myObject.double() // 方法形式调用
复制代码

做用域

在一个代码块中(括在一对花括号中的一组语句)定义的全部变量在代码块的外部是不可见的。定义在代码块中的变量在代码块执行结束后会被释放掉。
在函数中的参数和变量在函数外部是不可见的,而在一个函数内部任何位置定义的变量,在该函数内部任何地方均可见。this

模块

使用函数和闭包来构造模块。模块是一个提供接口却隐藏状态和实现的函数或对象。
模块模式的通常形式是:一个定义了私有变量和函数的函数;利用闭包建立能够访问私有变量和函数的特权函数;最后返回这个特权函数,或者把它们保存到一个可访问到的地方。spa

String.method('deentityify',function () {
	// 字符实体表,它映射字符实体的名字到对应的字符
	var entity = {
		quot:'"',
		lt:'<',
		gt:'>'
	}
	// 返回deentityify方法
	return function () {
	// 这个才是deentityify方法所执行的程序
		return this.replace(/&([^&;]+);/g), function (a,b) {
			var r = entity[b]
			return typeof r === 'string'? r : a;
		}) 
	}
}())
复制代码

级联

对于没有返回值的方法,咱们可让这些方法返回this而不是undefined,这样就是可以使用级联。咱们能够在一条语句中依次调用同一个对象的不少方法。prototype

getEle('div').move(200,300).width(100).height(100)
复制代码

记忆

函数能够将先前操做的结果记录在某个对象里,从而避免无谓的重复计算。

var fibonacci = function () {
	var memo = [0,1]
	var fid = function (n) {
		var result = memo[n]
		if (typeof result !== 'number') {
			result = fib(n-1) + fib(n-2)
			memo[n] = result
		}
		return result
	}
	return fid
}()
复制代码

第五章 继承

继承

var Cat = function (name) {
	this.name = name
}
Cat.prototype = new Animal()
复制代码

第六章 数组

数组

在大多数语言中,一个数组的全部元素都要求是相同的类型。JavaScript容许数组包含任意混合类型的值。

长度

length属性的值是这个数组的最大整数属性名加上1.它不必定等一数组中属性的个数。

var demo = []
demo.length //0
demo[100] = 1
demo.length //101 
复制代码

删除

使用delete关键字删除数组元素,会在数组在原先的位置上留下一个undefined。使用数组方法splice可以避免这个问题

var demo = [1,2,3,4,5]
delete demo[2] // [1,2,undefined,4,5]
demo = [1,2,3,4,5]
demo.splice(2,1) // [1,2,4,5]
复制代码

第七章 正则表达式

正则表达式

一、能够直接经过字面量建立正则表达式.

var regexp = ‘/^\d+&/i’
标示含义:
g:全局的(匹配屡次;不一样的方法对g标示的处理各不相同)
i:大小写不敏感(忽略字符大小写)
m:多行(^和&能匹配行结束符)
复制代码

二、使用RegExp构造器。第一个参数为正则表达式,第二个参数为指定的标示。

第八章 方法

本章主要介绍了JS中Array、Function、Number、Object、RegExp、String类型扩展的方法介绍和部分方法的内部实现方式。

第九章 代码风格

本章主要介绍了提醒咱们要注意代码风格,一个好的代码规范可以有效的提高程序的可扩展性与健壮性。

相关文章
相关标签/搜索