JS函數(shù)調(diào)用的四種方法:方法調(diào)用模式摩梧,函數(shù)調(diào)用模式物延,構(gòu)造器調(diào)用模式,apply,call調(diào)用模式
1.方法調(diào)用模式:
先定義一個對象仅父,然后在對象的屬性中定義方法叛薯,通過myobject.property來執(zhí)行方法,this即指當前的myobject
對象笙纤。
var blogInfo={
blogId:123,
blogName:"werwr",
showBlog:function(){alert(this.blogId);}
};
blogInfo.showBlog();
2.函數(shù)調(diào)用模式
定義一個函數(shù)案训,設(shè)置一個變量名保存函數(shù),這時this指向到window對象粪糙。
var myfunc = function(a,b){
return a+b;
}
alert(myfunc(3,4));
3.構(gòu)造器調(diào)用模式
定義一個函數(shù)對象,在對象中定義屬性忿项,在其原型對象中定義方法蓉冈。在使用prototype的方法時,必須實例化該對象才能調(diào)用其方法轩触。
var myfunc = function(a){
this.a = a;
};
myfunc.prototype = {
show:function(){alert(this.a);}
}
var newfunc = new myfunc("123123123");
newfunc.show();
4.apply,call調(diào)用模式
var myobject={};
var sum = function(a,b){
return a+b;
};
var sum2 = sum.call(myobject,10,30); //var sum2 = sum.apply(myobject,[10,30]);
alert(sum2);
調(diào)用函數(shù)可以使用call或者apply這兩個方法寞酿,區(qū)別在于call需要將傳遞給函數(shù)的參數(shù)明確寫出來,是多少參數(shù)就需要寫多少參數(shù)脱柱。而apply則將傳遞給函數(shù)的參數(shù)放入一個數(shù)組中伐弹,傳入?yún)?shù)數(shù)組即可。
每個函數(shù)都包含兩個非繼承而來的方法:apply()和?call()榨为,這兩個方法的用途都是在特定的作用域中調(diào)用函數(shù)惨好,實際上等于設(shè)置函數(shù)體內(nèi)this對象的值。首先随闺,apply()方法接收兩個參數(shù):一個是在其中運行函數(shù)的作用域日川,另一個是參數(shù)數(shù)組。
閉包會增加內(nèi)存泄漏的風險