成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

call、apply和bind方法

clasnake / 2131人閱讀

摘要:和和方法非常相似,都是先設(shè)置函數(shù)中的操作符的值,并且執(zhí)行這個(gè)函數(shù)。區(qū)別以數(shù)組形式接受傳遞給函數(shù)的參數(shù)以單個(gè)分開參數(shù)的形式例子使用操作符訪問實(shí)例的和屬性通過和函數(shù)調(diào)用該方法方法也可以設(shè)置操作符的值,但不執(zhí)行它。

1. call和apply call和apply方法非常相似,都是先設(shè)置函數(shù)中的this操作符的值,并且執(zhí)行這個(gè)函數(shù)。

區(qū)別:

apply以數(shù)組形式接受傳遞給函數(shù)的參數(shù)

call以單個(gè)分開參數(shù)的形式

例子:

class Person {
    public name: string;
    public surname: string;
    
    constructor(name: string, surname: string) {
        this.name = name;
        this.surname = surname;
    }
    
    public greet(city: string, country: string) {
        // 使用this操作符訪問實(shí)例的name和surname屬性
        var msg = `Hi, my name is ${this.name} ${this.surname}. `;
        msg += `I"m from ${city} (${country}).`;
        console.log(msg);
    }
}


var person = new Person("Fourteen", "Zhang");

person.greet("Shijiazhuang", "China");
// Hi, my name is Fourteen Zhang. I"m from Shijiazhuang (China).

// 通過call和apply函數(shù)調(diào)用該方法
person.greet.call(person, "Shijiazhuang", "China");
person.greet.apply(person, ["Shijiazhuang", "China"]);

var valueOfThis = { name: "Fourteen", surname: "Zhang" };
person.greet.call(valueOfThis, "Shijiazhuang", "China");
person.greet.apply(valueOfThis, ["Shijiazhuang", "China"]);
// Hi, my name is Fourteen Zhang. I"m from Shijiazhuang (China).
2. bind bind方法也可以設(shè)置this操作符的值,但不執(zhí)行它。

注意:

調(diào)用函數(shù)的bind方法時(shí),返回一個(gè)和原函數(shù)具有相同函數(shù)體和作用域的新函數(shù)

函數(shù)體內(nèi)部的this操作符指向的值,已被永久地改變?yōu)閭鬟f給bind方法的第一個(gè)參數(shù),不會(huì)改變

例子:

var person = new Person("Fourteen1", "Zhang");

var greet = person.greet.bind(person);

greet.call(person, "Hebei", "China");
greet.apply(person, ["Hebei", "China"]);
// Hi, my name is Fourteen1 Zhang. I"m from Shijiazhuang (China).

greet.call(null, "Hebei", "China");
greet.apply(null, ["Hebei", "China"]);
// Hi, my name is Fourteen1 Zhang. I"m from Hebei (China).

var valueOfThis = { name: "Fourteen2", surname: "Zhang" };
greet.call(valueOfThis, "Hebei", "China");
greet.apply(valueOfThis, ["Hebei", "China"]);
// Hi, my name is Fourteen1 Zhang. I"m from Hebei (China).

一旦使用bind方法為一個(gè)函數(shù)內(nèi)的this操作符進(jìn)行了綁定,就不能再覆蓋它:

var valueOfThis = { name: "Fourteen3", surname: "Zhang" };

var greet = person.greet.bind(valueOfThis);
greet.call(valueOfThis, "Hebei", "China");
greet.apply(valueOfThis, ["Hebei", "China"]);
// Hi, my name is Fourteen1 Zhang. I"m from Hebei (China).

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90759.html

相關(guān)文章

  • JS基礎(chǔ)篇--callapply、bind方法詳解

    摘要:首先我們可以通過給目標(biāo)函數(shù)指定作用域來簡(jiǎn)單實(shí)現(xiàn)方法保存,即調(diào)用方法的目標(biāo)函數(shù)考慮到函數(shù)柯里化的情況,我們可以構(gòu)建一個(gè)更加健壯的這次的方法可以綁定對(duì)象,也支持在綁定的時(shí)候傳參。原因是,在中,多次是無效的。而則會(huì)立即執(zhí)行函數(shù)。 bind 是返回對(duì)應(yīng)函數(shù),便于稍后調(diào)用;apply 、call 則是立即調(diào)用 。 apply、call 在 javascript 中,call 和 apply 都是...

    lastSeries 評(píng)論0 收藏0
  • JS中的call、applybind方法詳解

    摘要:不能應(yīng)用下的等方法。首先我們可以通過給目標(biāo)函數(shù)指定作用域來簡(jiǎn)單實(shí)現(xiàn)方法保存,即調(diào)用方法的目標(biāo)函數(shù)考慮到函數(shù)柯里化的情況,我們可以構(gòu)建一個(gè)更加健壯的這次的方法可以綁定對(duì)象,也支持在綁定的時(shí)候傳參。原因是,在中,多次是無效的。 bind 是返回對(duì)應(yīng)函數(shù),便于稍后調(diào)用;apply 、call 則是立即調(diào)用 。 apply、call 在 javascript 中,call 和 apply 都是...

    zombieda 評(píng)論0 收藏0
  • 前端基礎(chǔ):call,apply,bind的的理解

    摘要:和區(qū)別其實(shí)他們的作用是一樣的,只是傳遞的參數(shù)不一樣而已。接受個(gè)參數(shù),第一個(gè)參數(shù)指定了函數(shù)體內(nèi)對(duì)象的指向,第二個(gè)參數(shù)為數(shù)組或者一個(gè)類數(shù)組??磦€(gè)栗子一個(gè)有意思的事在中,多次是無效的。而則會(huì)立即執(zhí)行函數(shù)。 背景 前兩天在做小程序的需求的時(shí)候用到bind的時(shí)候才想起自己對(duì)這三的東西的了解比較淺薄,這個(gè)時(shí)候用的時(shí)候就有點(diǎn)怕。時(shí)候還是要好好學(xué)習(xí)下,理解下怎么玩。 正文 先說call 和 apply...

    netmou 評(píng)論0 收藏0
  • 理解JavaScript中的call,applybind方法

    摘要:輸出的作用與和一樣,都是可以改變函數(shù)運(yùn)行時(shí)上下文,區(qū)別是和在調(diào)用函數(shù)之后會(huì)立即執(zhí)行,而方法調(diào)用并改變函數(shù)運(yùn)行時(shí)上下文后,返回一個(gè)新的函數(shù),供我們需要時(shí)再調(diào)用。 前言 js中的call(), apply()和bind()是Function.prototype下的方法,都是用于改變函數(shù)運(yùn)行時(shí)上下文,最終的返回值是你調(diào)用的方法的返回值,若該方法沒有返回值,則返回undefined。這幾個(gè)方法...

    chaosx110 評(píng)論0 收藏0
  • this總結(jié)【2】—— call/applybind

    摘要:和概覽我們要將歸為一類,單獨(dú)歸為一類三者的共同點(diǎn)是都可以指定和都是綁定在的原型上的,所以的實(shí)例都可以調(diào)用這三個(gè)方法至于為什么,看完這篇文章你就懂了如果你不懂什么是實(shí)例的話,請(qǐng)移步深入淺出面向?qū)ο蠛驮透拍钇钊霚\出面向?qū)ο蠛驮透拍钇谝粋€(gè) 1.call/apply和bind概覽 我們要將call/apply歸為一類,bind單獨(dú)歸為一類 三者的共同點(diǎn)是都可以指定this call/...

    wudengzan 評(píng)論0 收藏0
  • js 面試官想了解你有多理解call,apply,bind?

    摘要:返回值這段在下方應(yīng)用中有詳細(xì)的示例解析?;卣{(diào)函數(shù)丟失的解決方案綁定回調(diào)函數(shù)的指向這是典型的應(yīng)用場(chǎng)景綁定指向,用做回調(diào)函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000019971331?w=1024&h=680); 函數(shù)原型鏈中的 apply,call 和 bind 方法是 JavaScript 中相當(dāng)重要的概念,與 this...

    wuaiqiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<