1 .JavaScript 對象的基本原理
1.1 對象怎樣成爲對象 var aOjbect = new Object();
1.2 對象的屬性
一般用點操作符來引用對象的屬性,在屬性名稱中有點的話就不可以了。
所以需要更通用的表示法來訪問對象屬性。
object[propertyNameExpression]
1.3 對象的字面量
var ride = {
make : 'Yamaha',
model : 'V-Star',
year : 2010,
purchased : new Date(2005,3,12),
owner : {
name:'Spike Spiegel',
occupation : 'bounty hunter'
}
};
這個片段利用對象字面量來創建ride對象。
這個表示法稱爲JSON(JavaScript Object Notation, JavaScript 對象表示法)。
1.4 對象作爲window屬性
JavaScript Object 概述的重要概念:
- JavaScript對象是屬性的無序集合;
- 屬性由名稱和值構成;
- 對象可以利用對象字面量來聲明;
- 頂層變量/函數是window的屬性。
2 函數在JavaScript裏是一等對象
Function可以
- 指派給變量
- 指派給對象的屬性
- 作爲函數參數
- 作爲函數結果返回
- 用字面量來創建
函數不僅有值(函數體)還有名稱。
2.1 名稱裏面是什麼
函數字面量表示法
doSomethingWonderful = function(){
alert('does something wonderful');
}
2.2 作爲回調函數(callback functions )
在異步編程中最爲流行的概念是回調函數。
setTimeout(function(){ alert('Hi here!'); },5000);
2.3 this到底是什麼
this所引用的對象被稱爲函數上下文。
函數context 不是由如何聲明函數決定,而是由如何調用函數決定。
JavaScript也提供顯示地辦法設置function context.
通過Function方法call() 或apply()來調用函數,可以把函數上下文設置爲所想的任何東西。
用call()來調用函數(這個函數作爲第一個參數),其餘參數作爲被調用函數的參數。
apply()方法和call()相似,除了第二個參數要求是對象數組。
”函數是對象的方法“是不正確的。
在對象充當函數的調用上下文時,函數充當對象的方法。
2.4 閉包(closures)
閉包就是Function實例,外加對於Function實例的執行來說是必需的、來自環境的本地變量。
JavaScript裏所有的閉包被隱式地創建。這就使得在代碼中難以發現閉包。
$(function(){
var local=1;
window.setInterval(function(){
$('#display')
.append('<div>At ' + new Date()+' local=' + local + '</div`>');
local++;
},3000);
});
函數上下文決不被包含爲閉包的一部分。
如果需要訪問在外部函數裏作爲函數上下文的對象,可以採用普通的習慣用法:在本地變量裏創建this引用的副本,這個副本將被包含在閉包裏。
this.id = 'someID';
var outer = this;
$('*').each(function(){
alert(outer.id);
});