javascript學習感觸

來源:互聯網
上載者:User
從開始接觸javascript到現在也有2個星期了吧,有很多感觸,在這裡分享些許。
javascript雖然是物件導向的,但是在我前面的幾篇“混亂中”,我也已經談了自己的想法,我開始甚至抵觸過這個語言,為什麼這個語言也居然宣稱自己是物件導向的呢?學習一個新的東西開始的時候都是很痛苦的,尤其是已經存在的一些概念或認識跟這個要學的東西向抵觸的時候?有放棄的衝動和想法。
我是一個不輕易放棄的人,即便是暫時接受不了,可能會放下一段時間,然後重新開始,也許這是我這些年一直慣用的方式,反覆學習,斷斷續續的堅持,享受過程的折磨,每一次都希望比上一次進步一點,直到愛上他為止。
愛上這個詞我說的有點過了,折磨這個詞,是我從“老鷹重生”這個寓言故事中摘出來的,我很喜歡這個預言故事,寓言故事往往是鼓舞人心的,給人力量的。但是這則預言,很真實,尤其是在這個社會中,要得到自己想要的東西,和學到自己喜歡的東西那要付出代價,經曆一番痛苦。過程的艱辛會讓人記得更牢,更牢。
要沒做,要麼不做,這是我對自己的承諾,盡最大努力做好。
javavascript中的匿名函數,原型,閉包,我覺得是非常重要的東西,如果將這些掌握了,那麼javascript的主要內容已經沒有問題了,然後就是CSS的內容了。
每一門學科或者技術或者其他區別於其他的第一點就是有自己的專業術語,專有的領域(現在很多都是綜合性)還有就是解決問題的方法.
對於專業術語,先認真學習,然後用自己的話去解釋,所謂先認識,後解釋,然後應用,應用的過程就是用它自己的一些方法在它的一些領域中解決一些問題。
在網路盛行的今天,搜尋引擎發揮了很大的作用,讓每個人都能快速的擷取知識和解決問題,如何快速的擷取以及如何快速的解決問題,這對一個人來說應該是一種新的能力,而我一直在思考。
我總是這麼的羅嗦,現在言歸正傳,說下我剛才提到的那幾個吧。 
匿名函數
匿名函數就是一個沒有具體名字的函數,還是通過例子去看吧。
在javascript中我們一般用下面的方式聲明函數:
1,function double(x) { return 2 * x; }2,var double = new Function('x', 'return 2 * x;');3,var double = function(x) { return 2* x; }

 





從這三種方式可以看出,都有一個名稱可以定位該函數,而匿名函數的聲明跟這個是有區別的,如下:
(function(x, y){ alert(x + y); })(2, 3);
 
匿名函數可以最為自執行函數和回呼函數中(如果用過JQuery和其他架構,可以看到很多)

閉包

閉包是一個陌生的概念,用我自己的話就是在一個函數中又定義一個函數,並且將這個函數變數或者名稱返回(當然也可以不返回,通過this指定),返回後原來的函數所佔的資源並不釋放,可以說是啟用狀態,比較拗口,看下面的例子:
function f1(){     var n=999;
function f2()
{     
  alert(n);  
}   
 return f2;  
 }  
 var result=f1();  
result(); // 999

 

 
從這個函數就可以看到,在f1中,我們又定義了一個f2,然後將f2返回,返回後仍然可以訪問定義在f1中的變數n,這也是閉包的一個作用,訪問內部參數,如果裡面對這個變數做了變化,那麼訪問的是這個變數的最終值。 

function buildList(list) { var result = []; for (var i = 0; i < list.length; i++) { var item = 'item' + list[i]; result.push(function () { alert(item + ' ' + list[i]) }); } return result; } function testList() { var fnlist = buildList([1, 2, 3]); for (var j = 0; j < fnlist.length; j++) { fnlist[j](); } } testList();
 上面的這個就是閉包的一個用法,當調用fnlist[j]()的時候彈出的都是item undefined,原因就是i在返回後已經變成了3,而list[3]是不存在的。 
原型

原型其本質是一個對象,普通的執行個體對象沒有本質上的區別。可以包含特定類型的所有執行個體的共用屬性或者方法,每個JavaScript函數都有prototype屬性,這個屬性引用了一個對象,這個對象就是原型對象。原型對象初始化的時候是空的,我們可以在裡面自訂任何屬性和方法,這些方法和屬性都將被該建構函式所建立的對象繼承。
下面的例子很直觀的說明了這點。
function User(name,age){//構造方法 this.name = name;//對象屬性 this.age = age;} User.prototype.addr = '湖北武漢';//在原型中添加屬性 User.prototype.show = function(){//在原型中添加方法 alert(this.name+'|'+this.age); };var user1 = new User('ZXC',22);//建立執行個體 var user2 = new User('CXZ',21);user1.show();//調用show()方法user2.show(); alert(user1.show == user2.show);//返回 true 說明show方法是共用的alert(user1.addr);//'湖北武漢' alert(user2.addr);//'湖北武漢' 
 通過原型,我們可以動態擴充一個對象的功能,很多架構的功能,不知道是不是通過這種方式來呢?
這些資料很多都是來自網上,感謝分享的人,同時將這些地址分享如下:
http://bonsaiden.github.com/JavaScript-Garden/
http://www.cnblogs.com/jsk540/archive/2010/10/26/1861630.html
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
http://www.cnblogs.com/phpzxh/archive/2009/09/16/1568137.html
http://www.cnblogs.com/chaofan/archive/2009/12/29/1635133.html
http://kb.cnblogs.com/page/144404/
http://blog.csdn.net/helloworl/article/details/7883507
http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html#m1
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.