最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中的apply()方法和call()方法使用介紹

 更新時(shí)間:2012年07月25日 17:00:12   作者:  
我們發(fā)現(xiàn)apply()和call()的真正用武之地是能夠擴(kuò)充函數(shù)賴以運(yùn)行的作用域,如果我們想用傳統(tǒng)的方法實(shí)現(xiàn)
1、每個(gè)函數(shù)都包含兩個(gè)非繼承而來的方法:apply()和call()。
2、他們的用途相同,都是在特定的作用域中調(diào)用函數(shù)。
3、接收參數(shù)方面不同,apply()接收兩個(gè)參數(shù),一個(gè)是函數(shù)運(yùn)行的作用域(this),另一個(gè)是參數(shù)數(shù)組。
call()方法第一個(gè)參數(shù)與apply()方法相同,但傳遞給函數(shù)的參數(shù)必須列舉出來。
  例1:
復(fù)制代碼 代碼如下:

window.firstName = "diz";
window.lastName = "song";
var myObject = { firstName: "my", lastName: "Object" };
function HelloName() {
  console.log("Hello " + this.firstName + " " + this.lastName, " glad to meet you!");
}
HelloName.call(window); //huo .call(this);
HelloName.call(myObject);

  運(yùn)行結(jié)果為:
Hello diz song glad to meet you!
Hello my Object glad to meet you!
  例2:
復(fù)制代碼 代碼如下:

function sum(num1, num2) {
return num1 + num2;
}
console.log(sum.call(window, 10, 10)); //20
console.log(sum.apply(window,[10,20])); //30

  分析:在例1中,我們發(fā)現(xiàn)apply()和call()的真正用武之地是能夠擴(kuò)充函數(shù)賴以運(yùn)行的作用域,如果我們想用傳統(tǒng)的方法實(shí)現(xiàn),請見下面的代碼:
復(fù)制代碼 代碼如下:

window.firstName = "diz";
window.lastName = "song";
var myObject = { firstName: "my", lastName: "Object" };
function HelloName() {
console.log("Hello " + this.firstName + " " + this.lastName, " glad to meet you!");
}
HelloName(); //Hello diz song glad to meet you!
myObject.HelloName = HelloName;
myObject.HelloName(); //Hello my Object glad to meet you!

  見加紅的代碼,我們發(fā)現(xiàn),要想讓HelloName()函數(shù)的作用域在對象myObject上,我們需要動態(tài)創(chuàng)建myObject的HelloName屬性,此屬性作為指針指向HelloName()函數(shù),這樣,當(dāng)我們調(diào)用myObject.HelloName()時(shí),函數(shù)內(nèi)部的this變量就指向myObjecct,也就可以調(diào)用該對象的內(nèi)部其他公共屬性了。
  通過分析例2,我們可以看到call()和apply()函數(shù)的真正運(yùn)用之處,在實(shí)際項(xiàng)目中,還需要根據(jù)實(shí)際靈活加以處理!
  一個(gè)小問題:再看一看函數(shù)中定義函數(shù)時(shí),this變量的情況
復(fù)制代碼 代碼如下:

function temp1() {
console.log(this); //Object {}
function temp2() {
console.log(this); //Window
}
temp2();
}
var Obj = {};
temp1.call(Obj); //運(yùn)行結(jié)果見上面綠色的注釋?。。?!

  執(zhí)行結(jié)果與下面的相同:
復(fù)制代碼 代碼如下:

function temp1() {
console.log(this);
temp2();
}
function temp2() {
console.log(this);
}
var Obj = {};
temp1.call(Obj);

4、bind()方法
  支持此方法的瀏覽器有IE9+、Firefox4+、Safari5.1+、Opera12+、Chrome。它是屬于ECMAScript5的方法。直接看例子:

復(fù)制代碼 代碼如下:

window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
var OSayColor = sayColor.bind(o);
OSayColor(); //blue

  這里,sayColor()調(diào)用bind()方法,并傳入o對象,返回了OSayColor()函數(shù),在OSayColor()中,this的值就為o對象。

相關(guān)文章

最新評論

蓬安县| 岱山县| 临武县| 石狮市| 奉节县| 徐汇区| 黄浦区| 陵川县| 都安| 澄城县| 股票| 彝良县| 灌阳县| 麻江县| 堆龙德庆县| 刚察县| 邵阳市| 勃利县| 和硕县| 石阡县| 那坡县| 黎川县| 桓仁| 渝中区| 宁德市| 托里县| 花垣县| 冀州市| 舒城县| 景洪市| 泰和县| 任丘市| 武定县| 山阴县| 明光市| 湖北省| 鄂托克旗| 竹溪县| 富顺县| 秦安县| 泰州市|