函數的四種調用模式


總結筆記,參考文檔 http://www.cnblogs.com/jiaozhuo/p/5751002.html
 
1  函數模式
     最普通的函數調用
 1 // 聲明式函數
 2 function fn1 () {
 3      console.log(this);
 4 }
 5 // 函數表達式函數
 6 var fn2 = function() {
 7      console.log(this);
 8 };
 9 // 調用 函數中this表示全局對象,在瀏覽器中就是指window
10 fn1();     //window
11 fn2();     //window

 

 
2 方法模式
     函數依附於一個對象,是對象的一個屬性,我們再調用這個函數。這種模式就是方法調用模式。
 
1 var obj = {
2     name: "zhangSan",
3     sayHi: function () {
4         console.log(this);
5     }
6 };
7 obj.sayHi(); //obj對象

 

 
3 構造器調用模式
即是構造函數的調用,一般是通過new + 函數名( )
這種模式和以上的方法模式沒本質的區別
 
 1 function Person() {}
 2 var tom = new Person(); // 這就是構造器函數的調用 
 3 
 4 // 構造函數調用的詳細過程
 5 // 1 會在內部創建一個對象o
 6 // 2 給對象賦值(this), 然后執行各種操作
 7 // 3 返回這個對象o
 8 
 9 
10 // 構造函數的返回值:
11  //
12  //   有一個默認的返回值,新創建的對象(實例);
13  //   當手動添加返回值后(return語句):
14  //         1. 返回值是基本數據類型-->真正的返回值還是那個新創建的對象(即實例)
15  //       2. 返回值是復雜數據類型(對象)-->真正的返回值是這個對象

 

 
4 上下文模式
本質--對象借用不屬於該對象的方法(函數),即我們自定義this的指向
這時候就需要call和apply這兩個方法
 
1     //Function.prototype.call ()
2     //Function.prototype.apply ()
3     //——>任何函數都可以調用call和apply方法
4 
5     // 第一個參數控制this的指向,第二個參數:
6                在使用 上下文調用的 時候, 原函數(方法)可能會帶有參數, 那么這個參數在上下文調用中使用 第二個( 第 n 個 )參數來表示
1     //偽數組
2     var o={ 0:10,1:20,length:2 };
3 
4     //讓o對象借用數組的push方法來添加元素
5     //[].push.call(o,30,50,70)
6     [].push.apply(o,[1,2,3])
7     console.log(o);//其中對象o中length屬性的值也會改變的哦

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM