色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript fun.call

劉若蘭1年前9瀏覽0評論

javascript的fun.call既是一種函數(shù)調(diào)用方式,也可以理解成一種函數(shù)的預(yù)處理機(jī)制,它可以動(dòng)態(tài)改變函數(shù)運(yùn)行時(shí)的作用域,可以將一個(gè)對象綁定到this參數(shù),并且可以傳遞多個(gè)參數(shù)到被調(diào)用的函數(shù)中去。下面通過幾個(gè)例子,來詳細(xì)講解fun.call的使用方法以及其應(yīng)用。

首先我們來看fun.call的最簡單的實(shí)例:

var name = "John";
var obj = {name: "Bob"};
function sayName(){
console.log("My name is " + this.name);
}
sayName(); //輸出 "My name is John"
sayName.call(obj); //輸出 "My name is Bob"

通過定義一個(gè)全局變量name并定義一個(gè)對象obj,通過fun.call將obj對象綁定到sayName函數(shù)的this參數(shù)中去,并輸出了obj的name屬性值,因此第二次調(diào)用輸出的是"My name is Bob"字符串,表示已成功的改變了sayName函數(shù)中的作用域。

其次我們來看fun.call的另一個(gè)重要用途是在實(shí)現(xiàn)繼承時(shí),可以使用子類調(diào)用父類構(gòu)造器的方式來共享屬性。下面我們來看一個(gè)例子:

function Animal(name) {
this.name = name;
}
Animal.prototype.getName = function () {
console.log(this.name);
}
function Dog(name) {
Animal.call(this, name);
this.type = 'dog';
}
var dog = new Dog('旺財(cái)');
dog.getName(); //輸出 "旺財(cái)"

在以上代碼中,我們定義了Animal類和Dog類,通過fun.call將Dog類對象this指向Animal對象并傳入name屬性值,則當(dāng)我們通過子類Dog來創(chuàng)建一個(gè)新對象時(shí),它會自動(dòng)調(diào)用父類Animal的構(gòu)造器,從而實(shí)現(xiàn)了屬性的繼承,最終輸出dog的name屬性值,即"旺財(cái)"字符串。

最后我們來看fun.call的最后一個(gè)應(yīng)用場景,就是和數(shù)組有關(guān)的時(shí)候。下面我們來看一個(gè)例子:

function sum(total) {
for(var i=1; i

在以上代碼中,我們定義了一個(gè)可以接收多個(gè)參數(shù)并計(jì)算它們總和的函數(shù)sum,然后通過fun.call方法將多個(gè)參數(shù)綁定到this參數(shù)中去,進(jìn)而得到結(jié)果10。同時(shí)我們還通過fun.apply方法來傳遞一個(gè)包含多個(gè)參數(shù)的數(shù)組nums,也得到了相同的結(jié)果,進(jìn)而說明fun.call方法也經(jīng)常和數(shù)組有關(guān),能夠接收傳過來的數(shù)組并轉(zhuǎn)換成數(shù)列來處理。在ES6的語法中可以使用...運(yùn)算符來方便的將數(shù)組變成多個(gè)參數(shù)進(jìn)行傳遞。

綜上所述,fun.call函數(shù)是javascript中十分常用的一種函數(shù)調(diào)用方式,它不僅可以改變函數(shù)中的作用域,還可以動(dòng)態(tài)綁定this參數(shù)以及傳遞多個(gè)參數(shù),通常用于繼承、變量傳遞和函數(shù)的構(gòu)造等各種應(yīng)用場景,是一種非常復(fù)雜卻又必不可少的函數(shù)。