精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript中的this指向,call、apply、bind的簡單實現(xiàn)

開發(fā) 前端
this是JavaScript中一個特殊關(guān)鍵字,用于指代當(dāng)前執(zhí)行上下文中的對象。它的難以理解之處就是值不是固定的,是再函數(shù)被調(diào)用時根據(jù)調(diào)用場景動態(tài)確定的,主要根據(jù)函數(shù)的調(diào)用方式來決定this指向的對象。

JavaScript中的this

this是JavaScript中一個特殊關(guān)鍵字,用于指代當(dāng)前執(zhí)行上下文中的對象。它的難以理解之處就是值不是固定的,是再函數(shù)被調(diào)用時根據(jù)調(diào)用場景動態(tài)確定的,主要根據(jù)函數(shù)的調(diào)用方式來決定this指向的對象。this 的值在函數(shù)被調(diào)用時動態(tài)確定,以下是幾種常見的情況:

  • 全局上下文中:當(dāng)在全局作用域中調(diào)用函數(shù)時,this 指向全局對象。在瀏覽器環(huán)境中,這個全局對象是 window 對象。
console.log(this); // 在瀏覽器中,輸出為 Window 對象
  • 函數(shù)作為對象的方法:當(dāng)函數(shù)作為對象的方法被調(diào)用時,this 指向調(diào)用該方法的對象。
const obj = {
  property: 'value',
  printProperty: function() {
    console.log(this.property);
  }
};


obj.printProperty(); // 輸出 'value'
  • 構(gòu)造函數(shù)中:在使用 new 關(guān)鍵字創(chuàng)建實例時,構(gòu)造函數(shù)內(nèi)部的 this 指向即將創(chuàng)建的新實例。
function Person(name) {
  this.name = name;
}


const person = new Person('Alice');
console.log(person.name); // 輸出 'Alice'
  • 顯式綁定:使用call、apply、bind方法可以顯式指定this的綁定對象。
function greet(message) {
  console.log(`${message}, ${this.name}!`);
}


const person = { name: 'Bob' };


greet.call(person, 'Hello'); // 輸出 'Hello, Bob!'
  • 箭頭函數(shù):箭頭函數(shù)不綁定this,它會捕獲外層作用域的this值作為自己的this。
const obj = {
  method: function() {
    const arrowFunc = () => {
      console.log(this === obj);
    };
    arrowFunc();
  }
};


obj.method(); // 輸出 true
  • class中的this:類中的this默認指向類的實例對象。
class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }
}


const rect = new Rectangle(10, 20);
console.log(rect.width); // 輸出 10
  • 事件綁定事件綁定中的this是指向觸發(fā)事件的dom元素。
const button = document.getElementById('myButton');


button.addEventListener('click', function() {
  console.log(this === button);
});
// 在按鈕點擊時輸出 true

如何改變this指向

改變 this 指向是在 JavaScript 中常見的需求,特別是當(dāng)你想要在不同的上下文中調(diào)用函數(shù)時。以下是幾種常見的方法來改變 this 指向:

  • 使用 call 方法:call 方法允許你顯式地指定函數(shù)內(nèi)部的 this 值,并且傳遞參數(shù)列表。第一個參數(shù)是要綁定的 this 值,后面的參數(shù)是函數(shù)的參數(shù)。
function greet(message) {
  console.log(`${message}, ${this.name}!`);
}


const person = { name: 'Alice' };


greet.call(person, 'Hello'); // 輸出 'Hello, Alice!' 這里把this綁定給person對象
  • 使用 apply 方法:apply 方法與 call 類似,但它接受一個數(shù)組或類數(shù)組對象作為參數(shù),其中的元素將作為函數(shù)參數(shù)傳遞。
function greet(message) {
  console.log(`${message}, ${this.name}!`);
}


const person = { name: 'Bob' };


greet.apply(person, ['Hi']); // 輸出 'Hi, Bob!'
  • 使用 bind 方法:bind 方法創(chuàng)建一個新函數(shù),將 this 值永久地綁定,并可以預(yù)先設(shè)置部分參數(shù)。原函數(shù)不會受到影響。
function greet(message) {
  console.log(`${message}, ${this.name}!`);
}


const person = { name: 'Charlie' };
const greetPerson = greet.bind(person);


greetPerson('Hey'); // 輸出 'Hey, Charlie!'
  • 使用箭頭函數(shù):箭頭函數(shù)不會綁定獨立的 this 值,而是捕獲其外部函數(shù)的 this 值。
const obj = {
  method: function() {
    const arrowFunc = () => {
      console.log(this === obj);
    };
    arrowFunc();
  }
};


obj.method(); // 輸出 true

call和apply區(qū)別

  1. bind 方法:
  • bind 方法創(chuàng)建一個新函數(shù),將原函數(shù)的 this 值永久綁定到指定的對象,并可以在調(diào)用時傳遞參數(shù)。
  • 它不會立即執(zhí)行原函數(shù),而是返回一個新的函數(shù),需要手動調(diào)用新函數(shù)以執(zhí)行原函數(shù)。
  • bind 方法不會改變原函數(shù)的上下文,而是返回一個新函數(shù)。
  1. call 方法:
  • call 方法立即調(diào)用函數(shù),并指定函數(shù)內(nèi)部的 this 值,同時可以傳遞參數(shù)列表。

  • 它的第一個參數(shù)是要綁定的 this 值,后續(xù)的參數(shù)會作為函數(shù)的參數(shù)傳遞。

  1. apply 方法:

  • apply 方法也立即調(diào)用函數(shù),并指定函數(shù)內(nèi)部的 this 值,但參數(shù)傳遞方式不同。

  • 它的第一個參數(shù)是要綁定的 this 值,第二個參數(shù)是一個數(shù)組(或類數(shù)組對象),其中的元素會作為函數(shù)的參數(shù)傳遞。

實現(xiàn)call、apply、bind

這里實現(xiàn)簡化版的,核心思路是:

  1. 將函數(shù)設(shè)為傳入對象的一個屬性
  2. 執(zhí)行該函數(shù)
  3. 刪除該函數(shù)(臨時函數(shù)調(diào)用完成刪除,防止內(nèi)存泄漏,以免context 對象造成污染)
  4. 返回結(jié)果或傳入的this

call

js
Function.prototype.myCall = function(context, ...args) {
  context = context || window;
  const fn = Symbol();


  context[fn] = this;


  const result = context[fn](...args);
  delete context[fn];


  return result;
}

apply

js
Function.prototype.myApply = function(context, args) {
  context = context || window;
  const fn = Symbol();


  context[fn] = this;


  let result;
  if(args) {
    result = context[fn](...args);
  } else {
    result = context[fn]();
  }


  delete context[fn];
  return result;
}

bind

js
Function.prototype.myBind = function(context, ...outerArgs) {
  context = context || window;
  const _this = this;
  
  return function(...innerArgs) {
    context[fn] = _this;
    const result = context[fn](...outerArgs, ...innerArgs);
    delete context[fn];
    return result;
  }
}

責(zé)任編輯:武曉燕 來源: 海燕技術(shù)棧
相關(guān)推薦

2024-03-15 08:21:17

bindJavaScrip函數(shù)

2021-06-18 07:16:17

JavaScript apply()方法call()方法

2021-12-05 08:27:56

Javascript 高階函數(shù)前端

2024-08-26 08:36:26

2024-08-20 16:04:27

JavaScript開發(fā)

2015-03-02 09:22:09

Javascript函數(shù)用法apply

2017-10-10 14:36:07

前端Javascriptapply、call、

2011-03-22 09:49:15

JavaScript

2021-11-30 06:56:58

CallApply函數(shù)

2021-06-09 07:01:30

前端CallApply

2017-07-27 16:31:11

2023-06-28 08:34:02

Bind()函數(shù)JavaScript

2019-04-03 10:50:09

Javascript區(qū)塊鏈技術(shù)

2015-10-29 14:29:48

javascriptthis指向

2025-03-03 08:40:00

JavaScriptthis開發(fā)

2011-08-15 12:55:54

SQL ServerOUTER APPLYCROSS APPLY

2015-06-08 13:19:11

JavaScriptgettersetter

2018-09-18 10:11:21

前端vue.jsjavascript

2017-08-22 16:40:22

前端JavaScript接口

2021-12-01 06:40:32

Bind原理實現(xiàn)
點贊
收藏

51CTO技術(shù)棧公眾號

在线āv视频| 在线免费看av的网站| 国产精品自在| 欧美性猛交xxxx乱大交3| 欧日韩一区二区三区| 国产精品无码久久av| 在线日韩电影| 在线视频欧美日韩| 91人人澡人人爽| 日韩欧美少妇| 亚洲国产欧美另类丝袜| 亚洲三级一区| 亚洲 另类 春色 国产| 免费视频一区二区| 午夜欧美大片免费观看| a一级免费视频| 日韩人体视频| 欧美变态口味重另类| 天堂在线资源视频| 草草在线视频| 亚洲美女偷拍久久| 日本一区视频在线观看| 人妻无码中文字幕| 国产一区二区三区精品视频| 国产成人综合亚洲| 国产成人在线播放视频| 亚洲精品成人影院| 中文字幕精品av| 人妻丰满熟妇aⅴ无码| 久久国产精品美女| 欧美日本一区二区三区| 成人黄色片视频| 91制片在线观看| 一区二区在线观看视频| 中文有码久久| 五月婷婷在线观看| 国产日韩欧美高清在线| 麻豆一区区三区四区产品精品蜜桃| 国产suv精品一区二区69| 日本欧洲一区二区| 国产99在线|中文| 美日韩一二三区| 国产精品三上| 97人人模人人爽人人喊中文字 | 视频一区日韩精品| 欧美日本韩国一区二区三区视频| 亚洲 中文字幕 日韩 无码| 欧美调教sm| 黄色成人av在线| 奇米精品一区二区三区| 九色porny自拍视频在线播放| 一区二区免费看| 日本大胆人体视频| 青春草视频在线观看| 一区二区三区日本| 无码av天堂一区二区三区| 蜜臀av在线| 午夜精品免费在线观看| 人妻av中文系列| 欧美激情20| 色综合久久综合| 欧美日韩亚洲一二三| 日本精品另类| 欧美丰满少妇xxxxx高潮对白| 中文字幕久久av| 嫩呦国产一区二区三区av| 日韩三级电影网址| 无码人妻精品一区二区三区99不卡| 哺乳挤奶一区二区三区免费看| 精品成a人在线观看| 国产肉体xxxx裸体784大胆| 亚洲日产av中文字幕| 中文字幕日韩电影| 少妇影院在线观看| 国产精品综合色区在线观看| 国产精品成久久久久三级| 一区二区日韩视频| 韩国v欧美v亚洲v日本v| 成人免费在线看片| 日韩欧美亚洲系列| 亚洲欧洲性图库| 亚洲人成无码网站久久99热国产| 老司机2019福利精品视频导航 | 国产精品一二三四五区| 盗摄精品av一区二区三区| 乱一区二区三区在线播放| 91最新在线| 亚洲自拍偷拍麻豆| 人妻丰满熟妇av无码区app| 国产亚洲高清在线观看| 亚洲二区在线播放视频| 蜜桃传媒一区二区亚洲| 一区二区三区毛片免费| 欧美一级bbbbb性bbbb喷潮片| 亚洲一区中文字幕永久在线| 国产aⅴ精品一区二区三区色成熟| 精品无人区一区二区三区竹菊| yw193.com尤物在线| 亚洲一区在线电影| 亚洲国产日韩欧美在线观看| 高潮久久久久久久久久久久久久| 国产亚洲精品久久久久久牛牛 | 日韩欧美国产成人| 久久精品久久99| 在线视频亚洲专区| 欧美国产日韩一区| 一起草av在线| 国产女同互慰高潮91漫画| 丁香六月激情婷婷| 日日夜夜亚洲| 亚洲欧洲一区二区三区在线观看 | 亚洲最大激情中文字幕| 麻豆国产在线播放| 亚洲制服丝袜在线| 精品综合久久久久| 精品在线观看入口| 国内自拍欧美激情| 国产欧美日韩综合精品一区二区三区| 久久看人人爽人人| 玩弄中年熟妇正在播放| 免费观看在线一区二区三区| 中文字幕在线亚洲| 草莓视频18免费观看| 99久久婷婷国产综合精品 | 日日夜夜天天综合入口| 欧美日本在线视频| 欧美福利在线视频| 老司机午夜免费精品视频| 精品久久蜜桃| av日韩国产| 日韩精品中文字幕在线不卡尤物| 黄色av片三级三级三级免费看| 蜜桃伊人久久| 久久免费一区| 国内精彩免费自拍视频在线观看网址 | 国产精品尤物视频| 久久精品一区蜜桃臀影院| 欧美精品99久久| 欧美精品中文| 77777少妇光屁股久久一区| 草草视频在线播放| 夜夜夜精品看看| 波多野吉衣在线视频| 欧美成人tv| 国产91社区| aa国产成人| 亚洲高清久久网| 日韩精品一区二区三| 成人免费视频一区| 777精品久无码人妻蜜桃| 欧美三级电影在线| 欧美在线免费观看| 黄色av免费在线观看| 日本丰满少妇一区二区三区| 国产又黄又粗视频| 美国欧美日韩国产在线播放| 一区二区三区四区在线视频| 日本欧美在线| 色在人av网站天堂精品| 午夜免费福利视频| 精品欧美国产一区二区三区| 久久精品综合视频| 天堂在线一区二区| 一区二区三区的久久的视频| 亚洲欧美综合久久久久久v动漫| 日韩中文字幕第一页| 国产99999| 午夜欧美在线一二页| 日本高清www| 免费一级片91| 韩国无码av片在线观看网站| 精品国产乱子伦一区二区| 日本韩国在线不卡| 毛片在线不卡| 精品久久久久一区二区国产| a v视频在线观看| 国产欧美日韩综合精品一区二区| 香蕉视频999| 国内自拍视频一区二区三区| 久久精品aaaaaa毛片| 日韩精品一区二区三区av| 超碰精品一区二区三区乱码| 色综合视频在线| 欧美在线制服丝袜| 黄页网站免费观看| 久久精品日产第一区二区三区高清版 | 亚洲精品一区二区三区福利| 亚洲中文字幕无码爆乳av| 亚洲色图另类专区| 亚洲欧美视频在线播放| 另类中文字幕网| 青青青青草视频| 日本久久一二三四| 精品国产91亚洲一区二区三区www| 欧美日韩五码| 久久久久久久久亚洲| av男人的天堂在线| 亚洲成人久久一区| 在线观看中文字幕码| 精品久久久久久中文字幕大豆网| 91禁男男在线观看| 26uuu亚洲| 欧美日韩一区二区区| 日韩高清在线不卡| 欧美国产日韩激情| 91精品亚洲| 欧美一区二区三区在线免费观看| 亚洲一区 二区| 国产精品吹潮在线观看| 草草在线观看| 欧美激情精品久久久久| av影片在线看| 亚洲欧美国产精品久久久久久久 | 亚洲精品一区二区三区婷婷月| 99这里有精品视频| 欧美日韩一区三区四区| 91精品国产高清一区二区三密臀| 依依成人综合视频| 国产黄色录像片| 国产日韩高清在线| 黄色工厂在线观看| 成人亚洲精品久久久久软件| 视频免费1区二区三区| 日日摸夜夜添夜夜添精品视频 | 国产私拍福利精品视频二区| 国内偷自视频区视频综合| 免费在线国产视频| 久久综合伊人77777| 日本在线天堂| 最近2019中文字幕大全第二页 | 国产熟人av一二三区| 亚洲主播在线| 国产原创中文在线观看| 国产中文一区| 日韩a级黄色片| 欧美精品日韩| 999久久欧美人妻一区二区| 亚欧美无遮挡hd高清在线视频| 亚洲福利av在线| 欧美码中文字幕在线| 亚洲国产成人不卡| 日本黄色精品| 做爰高潮hd色即是空| 欧美激情电影| 日日噜噜夜夜狠狠久久丁香五月| 97精品国产| 波多野结衣三级在线| 欧美 日韩 国产精品免费观看| 中文字幕在线中文字幕日亚韩一区| 日韩在线观看一区| 中文字幕一区二区三区精彩视频 | 亚洲图片小说视频| 欧美日韩国产高清一区二区三区| 在线视频 91| 制服.丝袜.亚洲.中文.综合| 国产aⅴ爽av久久久久成人| 欧美大片在线观看| 天天综合网天天综合| 亚洲毛片在线免费观看| 成人免费视频| 久久中文字幕视频| 久久www人成免费看片中文| 国内成人精品视频| 三上悠亚国产精品一区二区三区| 国产精品海角社区在线观看| 国产欧美在线观看免费| 444亚洲人体| 精品av导航| 亚洲精品在线视频观看| 亚洲老妇激情| 精品国产一区三区| 免费成人在线视频观看| 日本一本在线视频| 91蜜桃免费观看视频| 国产午夜福利一区| 樱花草国产18久久久久| 7799精品视频天天看| 91精品国产美女浴室洗澡无遮挡| 亚洲AV午夜精品| 亚洲欧美日韩中文在线| 国产原创精品视频| 91精品国产91久久| 午夜精品久久久久久毛片| 成人性色av| av一区二区在线播放| 国产乱子伦精品无码专区| 美女网站久久| 国产性猛交96| 国产欧美日韩三级| 国产一级在线观看视频| 在线观看一区日韩| 男人天堂一区二区| 最近2019中文免费高清视频观看www99| 久久国产精品黑丝| 成人免费看片视频| 日本一区福利在线| 精品国产三级a∨在线| 性一交一乱一区二区洋洋av| 中文字幕日韩久久| 国产色综合一区| 日本少妇全体裸体洗澡| 欧美日韩高清影院| 欧美一区二区三区少妇| 九九热在线精品视频| 久久精品97| 欧美日韩高清在线一区| 亚洲视频一区| 亚洲综合20p| 日本一区二区三区免费乱视频| 欧美成人三级视频| 在线观看精品一区| 日韩av免费观影| 国内揄拍国内精品少妇国语| 久久的色偷偷| 欧美h视频在线观看| 蜜臀va亚洲va欧美va天堂| 黄色录像a级片| 亚洲国产欧美日韩另类综合| 99久久精品国产成人一区二区| 亚洲欧美日韩一区二区三区在线| 国产在线xxx| 99re在线观看| 中文字幕一区二区三区欧美日韩 | 亚洲人成网站精品片在线观看| 日韩免费av网站| 亚洲精品自拍偷拍| 97久久人人超碰caoprom| 痴汉一区二区三区| 自拍偷拍欧美| 手机在线播放av| 亚洲精品成人a在线观看| 国产美女裸体无遮挡免费视频| 一级做a爰片久久毛片美女图片| 中文字幕在线中文字幕在线中三区| 国产精品久久7| 极品尤物久久久av免费看| 99riav国产精品视频| 一区二区三区中文字幕精品精品| 国产日韩免费视频| 久久中文字幕一区| 精品一区二区三区中文字幕视频| 国产精品12p| 国产精品一区二区黑丝| 国产精品成人免费观看| 欧美成人性福生活免费看| 欧美性爽视频| 国产主播一区二区三区四区| 亚洲大片在线| 黄色工厂在线观看| 在线视频国内自拍亚洲视频| 岛国在线视频免费看| 国产精品自拍网| 亚洲成人精选| 波多野结衣办公室双飞| 五月综合激情婷婷六月色窝| 日韩在线视频免费| 青草成人免费视频| 成人同人动漫免费观看| 91看片破解版| 亚洲第一久久影院| 女人天堂在线| 成人黄色片在线| 国产专区一区| 亚洲欧洲久久久| 欧美久久久久久久久| 日本在线观看高清完整版| 久久国产精品高清| 久久影院亚洲| 国产精品视频一区二区三| 亚洲成色www8888| 久久久一本精品| 亚洲第一综合网站| 91日韩在线专区| 中文字幕一区二区三区四区免费看 | ****av在线网毛片| 日本一区视频在线观看| 国产一区二区三区免费| 国产精品老女人| 日韩在线免费视频| 好吊妞国产欧美日韩免费观看网站| 日韩在线视频在线观看| 国产精品国产三级国产普通话蜜臀| www黄色在线观看| 秋霞成人午夜鲁丝一区二区三区| 色135综合网| 亚洲自拍偷拍一区二区 | 天天综合网在线| 91精品视频免费看| 亚洲女同在线| 中文字幕人妻一区二| 亚洲欧美在线一区二区| 久久久久久久久成人| 国产aaa一级片| 一区二区三区中文字幕精品精品 | 亚洲av无码久久精品色欲| 色综合婷婷久久| 一色桃子av在线| 亚洲永久激情精品| 久久婷婷国产综合精品青草| 国产高清免费av|