JavaScript包含一种原型链的特性,容许对象继承另外一个对象的属性。正确的使用它能减小对象初始化时消耗的时间和内存。正则表达式
检索JavaScript对象属性的时候,可以使用”||“运算符来填充默认值;当参试从undefined值中获取值时会致使TypeError异常,可使用“&&”运算符来避免错误。数组
var name = person.name || "vivo" person.address // undefined person.address.city // throw "TypeError" person.address && person.address.city // undefined 复制代码
原型关系是一种动态关系,若是咱们添加一个新的属性到原型中,该属性会当即对全部基于该原型建立的对象可见。bash
若是对象拥有独有的属性,将返回true。hasOwnProperty方法不会检查原型链上的属性。闭包
person.hasOwnProperty('name') // true person.hasOwnProperty('constructor') // false 复制代码
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
使用函数和闭包来构造模块。模块是一个提供接口却隐藏状态和实现的函数或对象。
模块模式的通常形式是:一个定义了私有变量和函数的函数;利用闭包建立能够访问私有变量和函数的特权函数;最后返回这个特权函数,或者把它们保存到一个可访问到的地方。spaString.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类型扩展的方法介绍和部分方法的内部实现方式。
本章主要介绍了提醒咱们要注意代码风格,一个好的代码规范可以有效的提高程序的可扩展性与健壮性。