Javascript 函數的四種調用模式
1 函數模式
最普通的函數調用
// 聲明式函數 function fn1 () { console.log(this); } // 函數表達式函數 var fn2 = function() { console.log(this); }; // 調用 函數中this表示全局對象,在浏覽器中就是指window fn1(); //window fn2(); //window
2 方法模式
函數依附於一個對象,是對象的一個屬性,我們再調用這個函數。這種模式就是方法調用模式。
var obj = { name: "zhangSan", sayHi: function () { console.log(this); } }; obj.sayHi(); //obj對象
3 構造器調用模式
即是構造函數的調用,一般是通過new + 函數名( ),這種模式和以上的方法模式沒本質的區別
function Person() {} var tom = new Person(); // 這就是構造器函數的調用 // 構造函數調用的詳細過程 // 1 會在內部創建一個對象o // 2 給對象賦值(this), 然後執行各種操作 // 3 返回這個對象o // 構造函數的返回值: // // 有一個默認的返回值,新創建的對象(實例); // 當手動添加返回值後(return語句): // 1. 返回值是基本數據類型-->真正的返回值還是那個新創建的對象(即實例) // 2. 返回值是復雜數據類型(對象)-->真正的返回值是這個對象
4 上下文模式
本質--對象借用不屬於該對象的方法(函數),即我們自定義this的指向
這時候就需要call和apply這兩個方法
//Function.prototype.call () //Function.prototype.apply () //——>任何函數都可以調用call和apply方法 // 第一個參數控制this的指向,第二個參數: 在使用 上下文調用的 時候, 原函數(方法)可能會帶有參數, 那麼這個參數在上下文調用中使用 第二個( 第 n 個 )參數來表示
//偽數組 var o={ 0:10,1:20,length:2 }; //讓o對象借用數組的push方法來添加元素 //[].push.call(o,30,50,70) [].push.apply(o,[1,2,3]) console.log(o);//其中對象o中length屬性的值也會改變的哦
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!