《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類型擴展的方法介紹和部分方法的內部實現方式。

第九章 代碼風格

本章主要介紹了提醒咱們要注意代碼風格,一個好的代碼規範可以有效的提高程序的可擴展性與健壯性。

相關文章
相關標籤/搜索