1、JavaScript對象的基本原理windows
(1) Object對象,與其餘面向語言相比,這裏的Object幾乎沒有任何相同之處。Object的實例是屬性的集合,也就是說,獲得Object實例的主要目的就是用做其餘對象的已命名集合。數組
(2) JavaScript對象是屬性的無序集合。閉包
(3) 屬性由名稱和值所構成。app
(4) 對象能夠利用對象字面量來聲明。Var make = 「Yame」;(可是沒有日期的字面量。因此須要用date構造器來表示時間,。Var time = new Date(2011,3,18))ide
(5) 頂層變量是Window的屬性。(在任何函數以外,如函數
Var foo = bar;和windows.foo = bar; foo =bar;三者是等效的)。this
2、函數是一等公民spa
(1) function與傳統面嚮對象語言有些區別。Function能夠指針
1. 被指派給變量orm
2. 被指派爲對象的屬性
3. 被傳入參數
4. 做爲函數結果返回
5. 用字面量來建立
所以,對待函數的方式與JavaScript語言裏的其餘對象相同。
這時候,咱們注意到一點頂層變量時Window的屬性,
這裏,咱們詳細說明一些:
Function doSomethingWonderful(){
Alert(‘does something wonderful’);
}
這個不是建立名爲 doSomethingWoderful 的函數,而是建立window的屬性。
還有一點function hello(){alert(‘23’);}和hello = functoin(){alert(‘23’);}和window.hello = function(){alert(‘hi there’);}是同樣的。注意理解一點:「正如其餘對象類型的實例那樣,Function實例是值,所以能夠支配給變量,屬性或者參數,而且就像其餘那些對象類型,無實體的無名實例毫無用處,除非他們被指派給變量,屬性或者參數。只有經過變量,屬性或者參數,他們才能被引用。」(摘自《Jquery實戰》中文版P246)
3、This究竟是什麼
Java和C++中,this的變量指向對象的當前實例。在JavaScript裏,略有不一樣,但必須當心。
在基於類的面嚮對象語言裏,this指針一般引用類的實例。在JavaScript中,函數是一等公民(不被聲明爲熱河東西的一部分),而this所引用的對象被稱爲函數上下文,由如何調用這個函數決定。
(1)在函數做爲頂層函數而被直接調用時,函數的上下文爲window實例。
(2)其中有call()和Apply()方法來調用函數,如
Var o1 = {handle:’o1’};
Function whoAmI()
{
Return this.handle;
}
Alert(WhoAmI.call(o1));
Alert(WhoAmI.apply(o1));
其中Call函數制定對象做爲函數上下文,而其他參數做爲被調用函數的參數,apply方法和call類似,除了第二個參數要求是對象數組之外(這些對象將成爲被條用函數的實參)。
因此說:函數是對象的方法是不正確的。
4、閉包
暫略。