理解JavaScript的function

JavaScript中萬惡的function
服務器君一共花費了110.040 ms進行了4次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

JavaScript中最有特色而又讓你困惑的function算一個了,下面看一下常用操作:

function doit(){
	.....
}
doit();

JavaScript中的函數我們可以把它當作方法使用

var obj=new Object();
obj.say=function(){
	.....
}
obj.say();

而function實際上就是對象(即Function類型的實例)

function result(num1, num2) {           
	return num1 + num2; 
}
var result = new Function("num1", "num2", "return num1+num2");

以上執行效果是一樣的,同時function result還可以這樣寫(即函數表達式)

var result=function(num1,num2){
	return num1+num2;
}

這倆種寫法的唯一區別是function是優先執行,而函數表達式是代碼執行到才執行,另外每個函數內部都有一個類似數組的arguments對象,函數執行動態參數,即:

function result(){
	return arguments[0]+arguments[1];
}
result(1,2);

arguments在動態傳遞參數方面經常使用。

既然說function是對象,那么它應該也具體屬性。

function person(){
	....
}
person.name="xxxx";
person.say=function(){
	alert(this.name);
}
person.say();   //alert("xxxx")

我們還可以把它當成類,而函數體相當于構造函數

function Person(nm){
	this.name=nm;
	this.say=function(){
		alert(nm);
		alert(this.name);
	}
}
var p1=new Person("ygm1");
p1.say(); //alert ygm1 ygm1
var p2=new Person("ygm2");
p2.say(); //alert ygm2 ygm2

注意這里要用this.name 因為this代表的是當前對象,如果直接alert(name) 求的是window對象的屬性,同時傳進來的參數nm在方法say中可以直接用,其實這涉及到作用域鏈,每個function體就是一個作用域,子域可以訪問到父域的屬性,而反過來卻不行(其實也是可以取到的,設計到閉包一些知識,這里不做詳解..)

與其他一些OO語言相比,每個類都可以有一些靜態屬性或方法,而javascript通過原型來模擬以達到每個對象共享其屬性。

function Person(num) {
	.....
}
Person.prototype.name = "ygm";
alert(new Person().name);

但OO語言的靜態方法都是由類去調用,不能實例化本身的,javascript中由于其特殊性恰好相反。

注意這里alertPerson的name屬性,如果函數體內沒有查找到name則會到原型中去找,如果查找到則會屏蔽原型中的name直接返回其值。

其實每創建一個function的同時也創建了一個原型對象,而原型對象引用自object,所以object是所有對象的基類。

我們可以重寫原型對象 Person.prototype=new ParentPerson();

Person的原型對象指向ParentPerson對象,而ParentPerson對象又指向自己的原型對象...,也就形成了原型鏈...

本文地址:http://www.snpmgr.live/librarys/veda/detail/1468,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.snpmgr.live/librarys/veda/detail/1468

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《設計模式:可復用面向對象軟件的基礎》 Erich Gamma (作者), Richard Helm (作者), Ralph Johnson (作者), John Vlissides (作者), 李英軍 (譯者), 等 (譯者)

《設計模式:可復用面向對象軟件的基礎》是引導讀者走出軟件設計迷宮的指路明燈,凝聚了軟件開發界幾十年設計經驗的結晶。四位頂尖的面向對象領域專家精心選取了最具價值的設計實踐,加以分類整理和命名,并用簡潔而易于重用的形式表達出來。本書已經成為面向對象技術人員的圣經和詞典,書中定義的23個模式逐漸成為開發界技術交流所必備的基礎知識和語匯。

更多計算機寶庫...

燃烧吧足球登陆