第一部分 Javascript 基礎 第2節 javascript的對象和函數

javascript的對象和函數javascript

javascript的對象和函數
對象

在面向對象對象語言中,類與對象的關係很是明確,一個對象必須是一個類的實例。
而javascript中卻沒有類的概念,沒有了類也就沒有繼承、多態、重載這些東西了。在一些javascript框架中有關於一些類的定義,這些東西只是經過javascript的特性來模擬面嚮對象語言,而並不是是javascript的本質。
javascript對象,最經常使用的寫法:java

  1. var obj = {}; 

這就是一個javascript對象,也就是第一節(javascript數據類型)最後所說的複雜數據類型。
定義一個javascript對象還有其餘方式,後面再說。
javascript對象,並非定義完了就不能改變的,隨着業務流程的須要你能夠在這個對象上添加,刪除你須要的屬性(變量,方法);
下面是一個例子,用來講明對象的變化:
1,一個消息對象,一開始我不知道里面須要什麼東西,因此我定義一個對象裏面沒有東西json

  1. var notification = {}; 

2,領導說,這個消息裏須要有個Id,那麼就能夠爲這個消息添加一個屬性id框架

  1. notification.id=1; 

這時notification有了id這個屬性。若是在面嚮對象語言中,你知道加這個屬性有多麻煩!
3, 領導又說,這個消息裏須要有個title,那麼就能夠爲這個消息添加一個屬性title函數

  1. notification.title="緊急消息"。 

4,領導又說了,這個消息可以有個方法,打印出這個notification的title,那麼就能夠爲這個notification添加一個methodthis

  1. notification.printTitle=function(){console.log(this.title)}; 

好了,以前定義的那個空的notification對象如今已經有了三個屬性。
5,領導某天有心血來潮說,他以爲不須要那個打印方法了,須要去掉。經過下面的方式就能夠完成prototype

  1. delete notification.printTitle; 

如今notification這個對象就剩下兩個屬性了:id 和 title。
6,領導又說,id和title也不想要了,相似的: code

  1. delete notification.title; 
  2. delete notification.id; 

如今notification對象已經恢復到剛開始的什麼也沒有的樣子了。
從上面這個流程你能夠看出,一個javascript對象,你能夠隨時對它的屬性進行修改,這個對象是可以時時變化的,很是的靈活。對象

函數

函數最基本的特性是可以被調用。
在javascript中聲明函數有多種方式:
function func1(…){…}//經常使用
var func2=function(…){…};//經常使用
var func3=function func4(…){…};//不經常使用
var func5=new Function();//不經常使用
經常使用的兩種分別爲定義式和變量式
定義式: 繼承

  1. function add(a,b){ 
  2. return a+b; 

變量式:

  1. var add = function(a,b){return a+b;} 

這兩種方式都是建立了一個javascript內置對象Function的一個實例,即一個對象(注意這個地方,函數是一個對象)。
能夠這麼理解函數是一個能夠被調用執行的對象,既然是對象,它就擁有對象所具備的一切特性。
須要注意的一點,javascript引擎對兩種聲明的分析和執行是不一樣的:

  1. var a = function(){alert(1);} 
  2. a(); 
  3. var a = function(){alert(2);} 
  4. a(); 
  5. //執行結果,先輸出1,在輸出2。
  6. function b(){alert(3)} 
  7. b(); 
  8. function b(){alert(4)} 
  9. b(); 
  10. //執行結果,都將輸出4.

JavaScript執行引擎並不是一行一行地分析和執行程序,而是一段一段地分析執行的。
什麼叫一段一段:

<script>第一段</script>
            <script>第二段</script>

在同一段程序的分析執行中,定義式的函數語句會被提取出來優先執行。函數定義執行完以後,纔會按順序執行其餘語句代碼。
對象的聲明與定義
1,json形式的聲明:
  1. var a = {};var b={name:'jack',gender:'m'} 

2,經過方法(或者說函數)構造對象:

  1. function A(){};//定義一個函數
  2. var a = new A();//注意這裏產生的是一個對象,千萬不要理解成實例,雖然很像,javascript中沒有類的概念固然也就沒有實例的概念。
  3. new 是javascript的一個運算符(就至關於 +-*/),new 把上述的語句進行分解,並執行: 
  4. var a ={}; 
  5. a.__proto__=A.prototype;//將a的原型鏈,指向A的原型(prototype不是原型鏈的一部分,它只是用來存儲原型屬性的載體!後面章節細說!)
  6. A.call(a); 
相關文章
相關標籤/搜索