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

Javascript動(dòng)手實(shí)現(xiàn)call,bind,apply的代碼詳解

 更新時(shí)間:2022年02月22日 11:44:11   作者:krysliang  
這篇文章主要為大家詳細(xì)介紹了Javascript動(dòng)手實(shí)現(xiàn)call,bind,apply的代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

1.檢查當(dāng)前調(diào)用的是否為函數(shù)

2.如果當(dāng)前沒(méi)有傳入指向的this,則賦值為window

3.將fn指向當(dāng)前調(diào)用的函數(shù)

4.獲取傳入的參數(shù)

5.將參數(shù)傳入fn進(jìn)行調(diào)用

6.將對(duì)象上的fn刪除

7.返回結(jié)果

  //普通call的實(shí)現(xiàn)
  function hello(){
      console.log('hello 我是'+this.name);
  };
  let person = {
      name:'krys'
  };
  var name = 'liang';//只有var的變量屬于window
  hello();// 'hello 我是liang'
  hello.call(person);//'hello 我是krys'
  hello.call();//'hello 我是liang'
  let person2 = {
      name:'lwl'
  }
  Function.prototype.mycall = function(context){
      //不傳入?yún)?shù)的時(shí)候,默認(rèn)為window
      if(typeof this !== "function"){
          throw new TypeError('Error');
      }
      context = context || window;
      context.fn = this;//fn就是上面的hello方法
      const args = [...arguments].slice(1);//第一個(gè)參數(shù)不要
      const result = context.fn(...args);//把剩下的其他參數(shù)傳給hello
      delete context.fn;
      return result;
  }
  hello.mycall(person2);
function getParams(){
        console.log('我是',this.name,'獲取一些參數(shù)',...arguments);
    }
    let person3 = {
        name:'hhh'
    };
    getParams.apply(person3,['hello','world'])
    Function.prototype.myApply = function(context){
        if(typeof this !== "function"){
            throw new TypeError()
        }
        context = context || window;
        context.fn = this;
        let result;
        if(arguments[1]){
            //如果有傳入?yún)?shù)數(shù)組
            console.log(arguments[1])
            result  = context.fn(...arguments[1]);
        }else{
            result  = context.fn();
        }
        delete context.fn;
        return result;
    }
    getParams.myApply({name:'llll'},['jjj','kkkk','llll']);
function getParams(){
        console.log('我是',this.name,'獲取一些參數(shù)',...arguments);
    }
    let person3 = {
        name:'hhh'
    };
    let person4 = {
        name:'tttt'
    };
    getParams.bind(person3,'hello','world')
    getParams.bind(person4,'hello','world')('jjj','kkk');
    Function.prototype.myBind = function(context){
        if(typeof this !== "function"){
            throw new TypeError()
        }
        context = context || window;
        const _that = this;
        const args = [...arguments].slice(1);
        return function F(){
            if(this instanceof F){
                return new _that(...args,...arguments);//這里的arguments是上面的jjj kkk
            }
            return _that.apply(context,args.concat(...arguments));//這里的arguments是上面的jjj kkk
        }
    }
    getParams.myBind({name:'llll'},'jjj','kkkk','llll')('hhhhllll');

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • js實(shí)現(xiàn)iframe動(dòng)態(tài)調(diào)整高度的代碼

    js實(shí)現(xiàn)iframe動(dòng)態(tài)調(diào)整高度的代碼

    iframe,尤其是不帶邊框的iframe因?yàn)槟芎途W(wǎng)頁(yè)無(wú)縫的結(jié)合從而不刷新頁(yè)面的情況下更新頁(yè)面的部分?jǐn)?shù)據(jù)成為可能,可是iframe的大小卻不像層那樣可以“伸縮自如”,所以帶來(lái)了使用上的麻煩,給iframe設(shè)置高度的時(shí)候多了也不好,少了更是不行,現(xiàn)在,讓我來(lái)告訴大家一種iframe動(dòng)態(tài)調(diào)整高度的方法,主要是以下JS函數(shù):
    2008-01-01
  • 使用 JScript 創(chuàng)建 .exe 或 .dll 文件的方法

    使用 JScript 創(chuàng)建 .exe 或 .dll 文件的方法

    JScript 是由微軟開(kāi)發(fā)的活動(dòng)腳本語(yǔ)言,基于 ECMAScript 規(guī)范實(shí)現(xiàn)。Internet Explorer 中的 JavaScript,實(shí)際上是指 JScript。
    2011-07-07
  • JavaScript實(shí)現(xiàn)的內(nèi)存數(shù)據(jù)庫(kù)LokiJS介紹和入門(mén)實(shí)例

    JavaScript實(shí)現(xiàn)的內(nèi)存數(shù)據(jù)庫(kù)LokiJS介紹和入門(mén)實(shí)例

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)的內(nèi)存數(shù)據(jù)庫(kù)LokiJS介紹和入門(mén)實(shí)例,LokiJS是一個(gè)內(nèi)存數(shù)據(jù)庫(kù),將性能考慮放在第一位,使用JavaScript編寫(xiě),需要的朋友可以參考下
    2014-11-11
  • JavaScript ParseFloat()方法

    JavaScript ParseFloat()方法

    parseFloat()方法可以解析一個(gè)字符串,并返回一個(gè)浮點(diǎn)數(shù)。本文給大家分享javascript parsefloat()方法的相關(guān)知識(shí),對(duì)javascript parsefloat相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • javascript實(shí)現(xiàn)的圖片預(yù)覽和上傳功能示例【兼容IE 9】

    javascript實(shí)現(xiàn)的圖片預(yù)覽和上傳功能示例【兼容IE 9】

    這篇文章主要介紹了javascript實(shí)現(xiàn)的圖片預(yù)覽和上傳功能,結(jié)合實(shí)例形式分析了javascrpt圖片預(yù)覽和上傳功能相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • javascript 隨機(jī)數(shù) 與高級(jí)應(yīng)用 附vbscript(asp) 隨機(jī)數(shù)總結(jié)

    javascript 隨機(jī)數(shù) 與高級(jí)應(yīng)用 附vbscript(asp) 隨機(jī)數(shù)總結(jié)

    有時(shí)忘了程序的隨機(jī)數(shù)函數(shù)或javascript和vbscript的隨機(jī)數(shù)混亂了,特總結(jié)下兩者的隨機(jī)數(shù)函數(shù),以備以后使用方便。
    2007-10-10
  • 詳解用場(chǎng)景去理解函數(shù)柯里化(入門(mén)篇)

    詳解用場(chǎng)景去理解函數(shù)柯里化(入門(mén)篇)

    這篇文章主要介紹了用場(chǎng)景去理解函數(shù)柯里化(入門(mén)篇),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 探究Javascript模板引擎mustache.js使用方法

    探究Javascript模板引擎mustache.js使用方法

    這篇文章主要為大家介紹了Javascript模板引擎mustache.js使用方法,mustache.js是一個(gè)簡(jiǎn)單強(qiáng)大的Javascript模板引擎,使用它可以簡(jiǎn)化在js代碼中的html編寫(xiě),壓縮后只有9KB,非常值得在項(xiàng)目中使用,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Js動(dòng)態(tài)創(chuàng)建div

    Js動(dòng)態(tài)創(chuàng)建div

    因?yàn)楣δ苄枰?需要?jiǎng)討B(tài)創(chuàng)建DIV
    2008-09-09
  • 微信小程序?qū)W習(xí)筆記之函數(shù)定義、頁(yè)面渲染圖文詳解

    微信小程序?qū)W習(xí)筆記之函數(shù)定義、頁(yè)面渲染圖文詳解

    這篇文章主要介紹了微信小程序?qū)W習(xí)筆記之函數(shù)定義、頁(yè)面渲染,結(jié)合實(shí)例形式較為詳細(xì)的分析了微信小程序中函數(shù)的定義、生命周期、模板調(diào)用、樣式控制等操作技巧,并配合圖文形式進(jìn)行了詳細(xì)說(shuō)明,需要的朋友可以參考下
    2019-03-03

最新評(píng)論

南岸区| 昌黎县| 保亭| 建湖县| 光山县| 长葛市| 吴川市| 大悟县| 都昌县| 泸溪县| 延安市| 五华县| 昌乐县| 长垣县| 凌海市| 长汀县| 丰原市| 苍溪县| 乐都县| 广丰县| 翼城县| 临高县| 辽阳市| 平定县| 云林县| 隆回县| 泸水县| 神木县| 定安县| 广宗县| 通江县| 乌鲁木齐县| 临江市| 赤水市| 高雄县| 扎鲁特旗| 昌宁县| 平舆县| 兴业县| 甘孜| 安图县|