(1)作為構(gòu)造器調(diào)用
利用new關(guān)鍵字可以不帶括號(hào)地調(diào)用函數(shù):
function Greet() { console.log("hello"); } new Greet; // parentheses are optional in this construct.
new操作符的語(yǔ)法為:
new constructor[([arguments])]
(2)隱性實(shí)現(xiàn) toString 或者 valueOf 的調(diào)用
另一個(gè)例子就可以隱性調(diào)用toString或者valueOf方法:
var greet = { toString: function() { return "hello"; } } greet + ""; // 字符串連接會(huì)強(qiáng)制性轉(zhuǎn)化到String類型,這樣就隱性調(diào)用了toString
可以利用這種方式調(diào)用任意的函數(shù):
function func() { console.log("hello"); } var greet = { toString: func } greet + "";
或者使用 valueOf:
function func() { console.log("hello"); } var greet = { valueOf: func } +greet;
如果要使用valueOf的話,可以在Function的原型中完成復(fù)寫(xiě),這樣也能完成一個(gè)函數(shù)的傳遞:
Function.prototype.valueOf = function() { this.call(this); // Optional improvement: avoid `NaN` issues when used in expressions. return 0; };
function greet() { console.log("hello"); } +greet;
(3)Iterators
可以利用*操作符創(chuàng)建一個(gè)迭代器,然后在下一個(gè)元素被遍歷的時(shí)候就會(huì)被自動(dòng)調(diào)用了:
function* func() { console.log("hello"); } var greet = {}; greet[Symbol.iterator] = func; [...greet];
一般來(lái)說(shuō)用迭代器的時(shí)候都會(huì)附帶一個(gè)yield語(yǔ)句,但是在這邊希望調(diào)用某個(gè)函數(shù)的時(shí)候不一定要加上這個(gè)語(yǔ)句。上述代碼中是最后一個(gè)語(yǔ)句調(diào)用了函數(shù),同時(shí)也可以利用解構(gòu)賦值來(lái)進(jìn)行調(diào)用
[,] = greet;
或者使用for ... of結(jié)構(gòu):
for ({} of greet);
(4)Getters
function func() { console.log("hello"); } Object.defineProperty(window, "greet", { get: func }); greet;
?也可以利用Object.assign:
Object.assign(window, { get greet() { console.log("hello"); }}); greet;
全局將 window 對(duì)象替換成一個(gè)你自定義的全局對(duì)象。
(5)Tagged Template Literals
ES6中可以利用模板字符串的方式調(diào)用:
function greet() { console.log("hello"); } greet``;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78900.html
摘要:讓我們快速的復(fù)習(xí)一下在中一共有兩種類型的值原始值和對(duì)象值原始值有布爾值數(shù)字還有字符串其他的所有值都是對(duì)象類型的值包括數(shù)組和函數(shù)類型轉(zhuǎn)化先按運(yùn)算符來(lái)分一下類減號(hào),乘號(hào),肯定是進(jìn)行數(shù)學(xué)運(yùn)算,所以操作數(shù)需轉(zhuǎn)化為類型。 前言 很多小伙伴們覺(jué)得javaScript很簡(jiǎn)單,下面的這行 javaScript代碼可能會(huì)讓你懷疑人生。 (!(~+[])+{})[--[~+][+[]]*[~+[]] +...
摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對(duì)方法,包括,,。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸?,因此文中只看懂?8 成左右,希望能夠給大家?guī)?lái)幫助....(據(jù)說(shuō)是阿里的前端妹子寫(xiě)的) this 的值到底...
摘要:匿名函數(shù)是不能單獨(dú)寫(xiě)的,所以就提不上立即執(zhí)行了。六立即執(zhí)行函數(shù)在閉包中的應(yīng)用立即執(zhí)行函數(shù)能配合閉包保存狀態(tài)。來(lái)看下上節(jié)內(nèi)容中閉包的例子現(xiàn)在,我們來(lái)利用立即執(zhí)行函數(shù)來(lái)簡(jiǎn)化它第一個(gè)匿名函數(shù)執(zhí)行完畢后,返回了第二個(gè)匿名函數(shù)。 前面的閉包中,提到與閉包相似的立即執(zhí)行函數(shù),感覺(jué)兩者還是比較容易弄混吧,嚴(yán)格來(lái)說(shuō)(因?yàn)橄?shū)和高程對(duì)閉包的定義不同),立即執(zhí)行函數(shù)并不屬于閉包,它不滿足閉包的三個(gè)條件。...
摘要:上一章我們學(xué)習(xí)了遍歷和擴(kuò)展字符語(yǔ)法。本章我們主要學(xué)習(xí)中的箭頭函數(shù)箭頭函數(shù)更準(zhǔn)確來(lái)說(shuō)叫箭頭函數(shù)表達(dá)式。箭頭函數(shù)余普通函數(shù)功能相同,但語(yǔ)法差別比較大。 帶你入門(mén) JavaScript ES6 (三) 本文同步帶你入門(mén) JavaScript ES6 (三),轉(zhuǎn)載請(qǐng)注明出處。 上一章我們學(xué)習(xí)了 for of 遍歷和擴(kuò)展字符語(yǔ)法。本章我們主要學(xué)習(xí) ES6 中的箭頭函數(shù) 箭頭函數(shù) 更準(zhǔn)確來(lái)說(shuō)叫 箭...
摘要:表示進(jìn)行多行匹配。如果正則表達(dá)式中含有子表達(dá)式,那么該數(shù)組后續(xù)的項(xiàng)依次為匹配到的第一個(gè)子表達(dá)式的匹配結(jié)果,第二個(gè)第個(gè)。關(guān)于正則方法有一點(diǎn)必須要提,很容易導(dǎo)致錯(cuò)誤的情況。這時(shí)候直接使用該正則表達(dá)式對(duì)進(jìn)行方法調(diào)用,卻返回了。匹配前一項(xiàng)至少次。有人說(shuō),一行正則抵得上100行代碼……正則表達(dá)式,每門(mén)語(yǔ)言都有,在我們的js開(kāi)發(fā)中,最常見(jiàn)的使用場(chǎng)景:一是表單驗(yàn)證,像是登錄注冊(cè)啊,用戶輸入檢測(cè)啊,不管在前...
閱讀 683·2023-04-25 18:59
閱讀 1223·2021-09-22 16:00
閱讀 1894·2021-09-22 15:42
閱讀 3602·2021-09-22 15:27
閱讀 1254·2019-08-30 15:54
閱讀 1110·2019-08-30 11:16
閱讀 2457·2019-08-29 16:24
閱讀 834·2019-08-29 12:14