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

JavaScript中的方法是什么

開發 前端
如果who是一個對象的屬性呢?要方便訪問對象的屬性,我們可以將函數附加到該對象,換句話說,就是創建一個方法。

[[395756]]

1.什么是方法

定義并調用一個常規函數:

  1. function greet(who) { 
  2.   return `Hello, ${who}!`; 
  3.  
  4. greet('World'); // => 'Hello, World!' 

function關鍵字后跟其名稱,參數和主體:function greet(who){...}進行常規的函數定義。

greet('World')是常規的函數調用。函數greet('World')接受參數中的數據。

如果who是一個對象的屬性呢?要方便訪問對象的屬性,我們可以將函數附加到該對象,換句話說,就是創建一個方法。

我們將greet()作為對象world的一種方法:

  1. const world = { 
  2.   who: 'World'
  3.  
  4.  greet() { return `Hello, ${this.who}!`; }} 
  5.  
  6. world.greet(); // => 'Hello, World!' 

greet() { ... }現在是屬于world對象的方法, world.greet()是方法調用。

在greet()方法內部,this指向該方法所屬的對象—world,這就是為啥可以this.who訪問 word屬性的原因。

注意,this也稱為上下文。

上下文是可選的

在上一個示例中,我們使用this來訪問該方法所屬的對象,但是 JS 沒有強制讓方法使用 this。

因此,可以將對象用作方法的命名空間:

  1. const namespace = { 
  2.   greet(who) { 
  3.     return `Hello, ${who}!`; 
  4.   }, 
  5.  
  6.   farewell(who) { 
  7.     return `Good bye, ${who}!`; 
  8.   } 
  9.  
  10. namespace.greet('World');    // => 'Hello, World!' 
  11. namespace.farewell('World'); // => 'Good bye, World!' 

namespace是一個包含2個方法的對象:namespace.greet()和namespace.farewell()。

2. 對象字面量方法

如前所述,我們可以直接在對象字面量中定義方法

  1. const world = { 
  2.   who: 'World'
  3.  
  4.  greet() { return `Hello, ${this.who}!`; }}; 
  5.  
  6. world.greet(); // => 'Hello, World!' 

greet() { .... }是在對象定義的方法,這種定義類型稱為速記方法定義(從ES2015開始可用)。方法定義的語法也更長:

  1. const world = { 
  2.   who: 'World'
  3.   greet: function() {  
  4.     return `Hello, ${this.who}!`;  
  5.   } 
  6.  
  7. world.greet(); // => 'Hello, World!' 

greet: function() { ... }是一個方法定義,注意附加的冒號和function關鍵字。

動態添加方法

方法只是一個函數,它作為屬性存儲在對象上。因此,我們可以向對象動態添加方法:

  1. const world = { 
  2.   who: 'World'
  3.  
  4.   greet() { 
  5.     return `Hello, ${this.who}!`; 
  6.   } 
  7. }; 
  8.  
  9. // A a new property holding a function 
  10. world.farewell = function () { 
  11.   return `Good bye, ${this.who}!`; 
  12.  
  13. world.farewell(); // => 'Good bye, World!' 

3.類方法

在 JavaScript 中,類別語法定義了一個類別,該類別將用作其實例的模板。

類也可以有方法:

  1. class Greeter { 
  2.   constructor(who) { 
  3.     this.who = who; 
  4.   } 
  5.  
  6.  greet() { console.log(this === myGreeter); // logs true return `Hello, ${this.who}!`; }} 
  7.  
  8. const myGreeter = new Greeter('World'); 
  9. myGreeter.greet(); // => 'Hello, World!'  

greet() { ... }是在類內部定義的方法。

每次我們使用new操作符(例如myGreeter = new Greeter('World'))創建一個類的實例時,都可以在創建的實例上調用方法。

myGreeter.greet()是如何在實例上調用方法greet()的方法。重要的是方法內部的this等于實例本身:this等于greet() { ... }方法內部的 myGreeter。

4.如何調用方法

4.1方法調用

JavaScript 特別有趣的是,在對象或類上定義方法只能算完成工作的一半。為了維護方法的上下文,我們必須確保將方法作為方法調用。

我們來看看為什么它很重要。

回憶一下有greet()方法的world對象。我們測試一下greet()作為一個方法和一個常規函數調用時,this值是什么:

  1. const world = { 
  2.   who: 'World'
  3.  
  4.   greet() { 
  5.  console.log(this === world);    return `Hello, ${this.who}!`; 
  6.   } 
  7. }; 
  8.  
  9. // 方法調用 
  10. world.greet(); // logs true 
  11. const greetFunc = world.greet; 
  12. // 常規函數調用 
  13. greetFunc(); // => logs false 

world.greet()是一個方法調用。對象world,后面是一個點.,最后是使方法調用的方法本身。

greetFunc與world.greet是同一個函數。但當作為常規函數greetFunc()調用時,這個在greet()中的并不等于world對象,而是全局對象(在瀏覽器中是window)

我們將諸如greetFunc = world.greet之類的表達式命名為將方法與其對象分離的方法。調用分離的方法greetFunc()時,this等于全局對象。

將方法與其對象分離可以采用不同的形式:

  1. // 方法分離, this 丟失了! 
  2. const myMethodFunc = myObject.myMethod; 
  3.  
  4. // 方法分離, this 丟失了! 
  5. setTimeout(myObject.myMethod, 1000); 
  6.  
  7. // 方法分離, this 丟失了! 
  8. myButton.addEventListener('click', myObject.myMethod) 
  9.  
  10. // 方法分離, this 丟失了! 
  11. <button onClick={myObject.myMethod}>My React Button</button> 

為了避免丟失方法的上下文,請確保使用方法調用world.greet()或手動將方法綁定到對象greetFunc = world.greet.bind(this)。

4.2間接函數調用

如上一節所述,常規函數調用已將this解析為全局對象。常規函數是否可以通過方法自定義 this值?

歡迎使用以下間接函數調用:

myFunc.call(thisArg, arg1, arg2, ..., argN);

myFunc.apply(thisArg, [arg1, arg2, ..., argN]);

函數對象上可用的方法。

myFunc.call(thisArg) 和 myFunc.apply(thisArg) 的第一個參數是間接調用的上下文(this值)。換句話說,我們可以手動指定函數內部 this 的值。

例如,讓我們將greet()定義為一個常規函數,以及一個具有who屬性的對象alien:

  1. function greet() { 
  2.   return `Hello, ${this.who}!`; 
  3.  
  4. const aliens = { 
  5.   who: 'Aliens' 
  6. }; 
  7.  
  8. greet.call(aliens); // => 'Hello, Aliens!' 
  9. greet.apply(aliens); // => 'Hello, Aliens!' 

greet.call(aliens)和greet.apply(aliens)都是間接的方法調用。這個在greet()函數中的值等于aliens對象。

4.3 綁定函數調用

最后,還有一種在對象上使函數作為方法調用的第三種方法。我們可以將函數綁定為具有特定上下文。

可以使用特殊方法創建綁定函數

  1. const myBoundFunc = myFunc.bind(thisArg, arg1, arg2, ..., argN); 

myFunc.bind(thisArg)的第一個參數是函數要綁定到的上下文。

例如,讓我們重用greet()并將其綁定到aliens上下文

  1. function greet() { 
  2.   return `Hello, ${this.who}!`; 
  3.  
  4. const aliens = { 
  5.   who: 'Aliens' 
  6. }; 
  7.  
  8. const greetAliens = greet.bind(aliens); 
  9.  
  10. greetAliens(); // => 'Hello, Aliens!' 

調用 greet.bind(aliens) 會創建一個新函數,該函數將 this 綁定到aliens對象。

同樣,使用綁定函數可以模擬方法調用。當調用綁定函數greetAliens()時,this等于該函數中的 aliens。

5. 箭頭函數作為方法

不推薦使用箭頭函數作為方法,原因如下。

我們將greet()方法定義為一個箭頭函數:

  1. const world = { 
  2.   who: 'World'
  3.  
  4.   greet: () => { 
  5.     return `Hello, ${this.who}!`; 
  6.   } 
  7. }; 
  8.  
  9. world.greet(); // => 'Hello, undefined!' 

不幸的是,world.greet()返回'Hello, undefined!而不是我們期待的'Hello, World!'。

問題是箭頭函數內部的this等于外部作用域的this。但是,此時,我們想要的this是world對象。

上述箭頭功能內部 this 等于全局對象:window。'Hello, ${this.who}!' 結果是 Hello, ${windows.who}!,最后是 'Hello, undefined!'。

我喜歡箭頭功能, 但是它們不能用作方法。

6. 總結

該方法是一個屬于對象的函數。方法的上下文(this)等于該方法所屬的對象。

還可以在類上定義方法。這個類的方法內部等于實例。JS 特有的一點是,僅僅定義一個方法是不夠的。我們還需要確保使用方法調用。通常,方法調用具有以下語法

  1. // Method invocation 
  2. myObject.myMethod('Arg 1''Arg 2'); 

有趣的是,在 JS 中,我們可以定義一個常規函數,但不屬于一個對象,然后作為一個任意對象的方法調用該函數??梢允褂瞄g接函數調用或將函數綁定到特定上下文來實現這一點

  1. // Indirect function invocation 
  2. myRegularFunc.call(myObject, 'Arg 1''Arg 2'); 
  3. myRegularFunc.apply(myObject, 'Arg 1''Arg 2'); 
  4.  
  5. // Bound function 
  6. const myBoundFunc = myRegularFunc.bind(myObject); 
  7. myBoundFunc('Arg 1''Arg 2'); 

我是小智,我要去刷碗了,我們下期見~

作者:Shadeed 譯者:前端小智 來源:dmitripavlutin 原文:https://dmitripavlutin.com/javascript-method/

本文轉載自微信公眾號「大遷世界」,可以通過以下二維碼關注。轉載本文請聯系大遷世界公眾號。

 

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2009-06-09 22:11:44

JavaScriptObject

2022-11-09 08:05:15

JavaScriptsuper()

2021-08-16 08:45:38

JavaScript開發代碼

2019-11-27 09:03:49

JavaScriptJavaCSS

2021-02-07 22:59:55

JavaScript編程方法鏈

2016-10-13 19:33:10

javascript數組indexOf

2021-09-10 06:50:03

HashMapHash方法

2022-09-15 09:54:34

nullPython字符

2010-06-29 13:58:17

SNMPMIB

2023-03-02 08:48:43

Linuxsubshell

2009-07-10 17:15:13

Javascript

2021-09-22 23:17:09

Java開發數組

2016-12-27 10:19:42

JavaScriptindexOf

2020-03-23 10:09:27

云安全云計算

2025-05-28 08:05:00

stdclassPHP開發

2023-03-28 07:03:15

gRPCMetadata

2021-12-03 18:29:31

GoAny 泛型

2022-06-29 08:37:03

事件循環JS 語言

2019-05-20 10:58:40

物聯網IOT技術

2023-03-01 09:49:23

點贊
收藏

51CTO技術棧公眾號

美女网站视频一区| www久久99| 色一情一乱一伦一区二区三区| 最新日韩免费视频| 午夜视频1000| 午夜天堂精品久久久久| 色av一区二区| 精品国产免费久久久久久尖叫| 男女做暖暖视频| 国产成人精品一区二区三区在线 | 欧美一区二区三区少妇| 日本精品另类| 久久久不卡网国产精品二区| 久久免费高清视频| 色综合久久五月| hd国产人妖ts另类视频| 懂色av中文字幕一区二区三区| xvideos亚洲| 五月天激情视频在线观看| 天堂视频中文在线| 亚洲久久在线| 日韩电影中文字幕一区| 欧美日韩在线一| 全部免费毛片在线播放一个| 欧美网站在线| 欧美变态凌虐bdsm| 全黄性性激高免费视频| www.亚洲黄色| 欧美日韩国产一区精品一区| 亚洲欧美综合精品久久成人| 999香蕉视频| 国产天堂素人系列在线视频| 日本不卡一区二区三区高清视频| 国产一区二区三区在线播放免费观看| 国产最新免费视频| 美女毛片在线看| 日韩成人一区二区| 丝袜情趣国产精品| 性一交一黄一片| gogo久久| 夜夜嗨av一区二区三区网页| 超碰国产精品久久国产精品99| 精品乱码一区内射人妻无码| 日韩久久久久| 91精品国产美女浴室洗澡无遮挡| 精品国产一区二区三区在线| 免费激情视频网站| 国产精品一区二区91| 韩国三级日本三级少妇99| 日本黄色片在线播放| 国产成人免费9x9x人网站视频| 午夜精品在线看| 日本在线观看不卡| 99久久久久久久| 99热精品在线| 最近2019中文字幕一页二页| 国产精品一二三区在线观看| 国产精品免费精品自在线观看| 亚洲大片在线观看| 亚洲精品无人区| 国产 日韩 欧美 精品| 美女国产精品| 欧美xxxx14xxxxx性爽| 亚洲av网址在线| 国产美女久久| 香蕉久久一区二区不卡无毒影院 | 性色av蜜臀av色欲av| 成人线上播放| 欧美色中文字幕| 国产免费一区二区视频| 成人在线观看网站| 国产丶欧美丶日本不卡视频| 日韩美女主播视频| 青青草手机视频在线观看| 免费成人高清在线视频theav| 欧美伦理视频网站| 男女午夜激情视频| 黄色的视频在线观看| 国产精品午夜免费| 久久大片网站| 亚洲精品综合网| 精品亚洲免费视频| 亲子乱一区二区三区电影| 日本青青草视频| 国产欧美日韩精品一区二区三区| 精品对白一区国产伦| 亚洲欧美自偷自拍另类| 一区二区三区短视频| 亚洲第一福利一区| www.亚洲天堂网| 国产一区二区三区四区五区3d| 制服丝袜av成人在线看| 午夜免费看视频| 三级欧美日韩| 日韩一区二区三区电影| 奇米视频888| 国产成人a视频高清在线观看| 91精品久久久久久蜜臀| 欧美肉大捧一进一出免费视频| 国产一区二区电影在线观看| 久久大大胆人体| 欧美自拍偷拍网| 欧美日韩精品一区二区视频| 亚洲激情 国产| 影音先锋黄色资源| 欧美成人milf| 中文字幕在线看视频国产欧美在线看完整 | 男人的天堂一区二区| 亚洲一级淫片| 久久久国产视频91| 99鲁鲁精品一区二区三区| 91久久夜色精品国产按摩| 久久久久久久久久久网站| 久久这里只有精品免费| 亚洲天堂偷拍| 97精品免费视频| 国产精品久久久久久免费| 精品一区二区三区免费播放 | 欧美日韩黄网站| 91精品国产综合久久久久久久久久| av免费观看不卡| 欧美成人午夜77777| 亚洲精品美女在线观看| 伊人在线视频观看| 免费成人美女在线观看| 国产一区二区在线免费视频| 国产精品久久久久毛片| 久久久精品2019中文字幕之3| 久久亚洲国产成人精品无码区| 肉肉视频在线观看| 亚洲成av人片| 国内自拍偷拍视频| 国产精品毛片av| 亚洲精品永久免费| 免费看裸体网站| 亚洲精品中文字幕乱码| 国产精品久久久久久久久影视| 在线观看日韩一区二区| 国产激情精品久久久第一区二区| 亚洲福利av| 日韩成人亚洲| 一区二区福利视频| 国产人妻精品一区二区三区不卡| 日韩国产欧美在线视频| 欧美日韩一区在线视频| 69久久精品| 一区二区欧美在线观看| 亚洲男人天堂av在线| eeuss鲁片一区二区三区| 久久精品国产欧美亚洲人人爽| 中文字幕制服诱惑| 成人免费高清视频| 五月天亚洲综合情| 99热播精品免费| 色七七影院综合| 一区二区的视频| 91免费精品国自产拍在线不卡| 偷拍视频一区二区| 成人在线视频免费| 久久国内精品一国内精品| 国产乱淫片视频| 亚洲精品日韩专区silk| 青青在线视频观看| 国产区精品区| 国产这里只有精品| 最新黄网在线观看| 欧洲精品在线观看| 国产一线在线观看| 亚洲影视综合| 国产成人女人毛片视频在线| 137大胆人体在线观看| 欧美日韩国产一区| www.超碰97| 日韩专区中文字幕一区二区| 亚洲视频在线观看日本a| h片在线观看下载| 色综合久久久久综合| 香蕉在线观看视频| 欧美一级专区| 在线免费观看成人| av免费在线一区| 久热在线中文字幕色999舞| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 狠狠久久五月精品中文字幕| 成人啪啪18免费游戏链接| 亚洲精品乱码| 亚洲精品一区二| 日韩高清在线观看一区二区| 欧美一级黑人aaaaaaa做受| 亚洲成人一级片| 欧美性色视频在线| 欧美xxxxx精品| 日韩—二三区免费观看av| 久久天天东北熟女毛茸茸| 国产主播性色av福利精品一区| 国产精品扒开腿做爽爽爽视频| 天堂成人在线| 欧美一区二区视频在线观看| 精品成人久久久| 亚洲特黄一级片| 激情文学亚洲色图| 韩国一区二区三区在线观看| 色一情一乱一伦一区二区三欧美| 日韩精品一区二区三区中文在线| 日本成熟性欧美| 久草在线资源站资源站| 欧美成人a∨高清免费观看| 福利网址在线观看| 久久久久久久久久久黄色 | 九七影院97影院理论片久久| 久久久久久久国产| 中文字幕日本在线观看| 亚洲精品久久久久国产| 国产精品永久久久久久久久久| 欧美性高潮床叫视频| 国产亚洲精品成人| 亚洲视频一区在线| ass极品国模人体欣赏| 91麻豆高清视频| 极品白嫩的小少妇| 一本久道综合久久精品| 色撸撸在线观看| 亚洲综合影院| 91爱爱小视频k| 韩国中文字幕2020精品| 欧美视频一区二区三区| 神马久久精品综合| 成人美女视频在线看| 亚洲视频在线不卡| 亚洲高清自拍| 欧美极品视频一区二区三区| julia中文字幕一区二区99在线| 国产一区香蕉久久| **在线精品| 久久精品久久久久久| eeuss影院在线播放| 亚洲视频精品在线| 噜噜噜噜噜在线视频| 精品无人国产偷自产在线| 日本人妻丰满熟妇久久久久久| 日韩欧美专区在线| 国产富婆一级全黄大片| 欧美性猛交xxxx乱大交蜜桃| 天天操天天射天天爽| 国产亚洲欧美色| 成年人性生活视频| 国产一区欧美日韩| 久久精品国产精品亚洲色婷婷| 亚洲国产影院| 99久久国产综合精品五月天喷水| 国产综合自拍| 亚洲熟妇无码一区二区三区导航| 一区视频在线| 国产av国片精品| 成人婷婷网色偷偷亚洲男人的天堂| 91亚洲精华国产精华| 亚洲天堂av影院| 久久久精品在线| 91cn在线观看| 国产最新精品视频| 午夜不卡影院| 国产精品福利在线观看网址| 91欧美精品| 2020国产精品久久精品不卡| 欧美7777| 国产精品久久久久免费a∨大胸| 99热播精品免费| 2014亚洲精品| 亚洲天堂日韩在线| 国产精品区一区二区三含羞草| 日韩美女在线看免费观看| 国产精品流白浆视频| 国产 日韩 欧美| 国产一区二区三区四区五区加勒比| 欧美电影在线观看网站| 91中文在线视频| 国产伊人久久| 99精品国产高清一区二区| 美女视频免费精品| av日韩免费电影| 欧美日韩看看2015永久免费 | 成人乱色短篇合集| 中文在线免费二区三区| 日韩美女写真福利在线观看| 国产精品2区| 欧美日韩高清在线一区| 亚洲综合中文| 无码人妻丰满熟妇区毛片18| 国精品**一区二区三区在线蜜桃| 国产精品久久久久久在线观看| 久久久久久久久久久电影| 91插插插插插插| 欧美日韩在线视频观看| 中文字幕一二三四| 亚洲精品久久久久中文字幕欢迎你| seseavlu视频在线| 性欧美激情精品| 久久亚洲精品中文字幕| 狠狠色伊人亚洲综合网站色| 93在线视频精品免费观看| 青青草国产免费| 精品一区二区三区免费视频| 国产精品一区二区入口九绯色| 亚洲色图19p| 日韩中文字幕高清| 在线视频你懂得一区| 亚洲va天堂va欧美ⅴa在线| 国产亚洲欧洲高清一区| 波多野在线观看| 91亚洲精品久久久| 青青草成人影院| 日韩中文字幕二区| 波多野洁衣一区| a视频免费观看| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲专区国产精品| 日韩精品看片| 国产精品人人妻人人爽人人牛| 久热re这里精品视频在线6| 久久久久久久久久久久久国产精品| 国产一区二区三区av电影| 亚洲精品国产精品国自| 国产精品成人网| 一区视频免费观看 | 国产色在线视频| 在线精品国产欧美| 欧美成人a交片免费看| 国产一区免费在线| 国产精品黄色| 在线成人精品视频| 亚洲免费观看高清| 国产精品久久久久久免费| 日韩中文字幕在线视频| 成人一区视频| 亚洲午夜精品福利| 麻豆国产91在线播放| 色偷偷中文字幕| 自拍偷拍欧美激情| 日韩成人在线免费视频| 日韩欧美一区二区免费| 欧美日韩视频精品二区| 91精品国产99| 午夜精品影视国产一区在线麻豆| 亚洲精品9999| 蜜臀久久久久久久| 懂色av粉嫩av浪潮av| 欧美日韩免费高清一区色橹橹| xxxxx日韩| 国产日本欧美视频| 99久精品视频在线观看视频| 免费观看美女裸体网站| 成人91在线观看| 免费黄色网址在线| 91精品欧美福利在线观看| 欧美极品另类| 日韩av快播网址| 精品久久久久久久久久久下田| 国产三级三级三级看三级| 国产精品色哟哟| 日韩伦人妻无码| 日韩国产在线看| 日本精品不卡| 综合久久国产| 粉嫩在线一区二区三区视频| 国产无码精品在线播放| 欧美日韩高清一区二区| 黄色在线播放网站| 国产精品久久久久久久久久久久久久| 国产亚洲电影| 日本一本在线视频| 午夜电影一区二区| a黄色在线观看| 亚洲综合小说区| 亚洲在线网站| 制服丨自拍丨欧美丨动漫丨| 91精品国产高清一区二区三区| 91美女精品| 一本一本久久a久久精品综合妖精| 国产精品白丝jk黑袜喷水| 久久99精品波多结衣一区| 日韩欧美国产一区二区在线播放| 丁香花在线观看完整版电影| 欧美高清视频一区二区三区在线观看 | 久久伊人精品一区二区三区| 国产女人18毛片水真多18精品| 成人免费无码av| 亚洲精品日日夜夜| 国产高清免费av在线| 91亚色免费| 日韩国产精品久久久久久亚洲| 手机在线免费看毛片| 亚洲天堂网站在线观看视频| youjizzjizz亚洲| 91福利国产成人精品播放| 亚洲国产视频一区二区| 性欧美一区二区三区| 日韩免费中文字幕| 欧美三区视频| 亚洲综合第一区| 日韩久久午夜影院|