JavaScript中怎麼不帶括號的呼叫函式

2021-09-19 11:08:55 字數 1592 閱讀 3771

(1)作為構造器呼叫

利用new關鍵字可以不帶括號地呼叫函式:

function greet() 

new greet; // parentheses are optional in this construct.

new操作符的語法為:

new constructor[([arguments])]
(2)隱性實現 tostring 或者 valueof 的呼叫

另乙個例子就可以隱性呼叫tostring或者valueof方法:

var greet = 

}greet + ''; // 字串連線會強制性轉化到string型別,這樣就隱性呼叫了tostring

可以利用這種方式呼叫任意的函式:

function func() 

var greet =

greet + '';

或者使用valueof:

function func() 

var greet =

+greet;

如果要使用valueof的話,可以在function的原型中完成複寫,這樣也能完成乙個函式的傳遞:

function.prototype.valueof = function() ;
function greet() 

+greet;

(3)iterators

function* func() 

var greet = {};

greet[symbol.iterator] = func;

[...greet];

一般來說用迭代器的時候都會附帶乙個yield語句,但是在這邊希望呼叫某個函式的時候不一定要加上這個語句。上述**中是最後乙個語句呼叫了函式,同時也可以利用解構賦值來進行呼叫

[,] = greet;
或者使用for ... of結構:

for ({} of greet);
(4)getters

function func() 

object.defineproperty(window, 'greet', );

greet;

也可以利用object.assign:

object.assign(window, }); 

greet;

全域性將window物件替換成乙個你自定義的全域性物件。

(5)tagged template literals

es6中可以利用模板字串的方式呼叫:

function greet() 

greet``;

JavaScript中prototype的理解

prototype使我們能夠向物件新增屬性或者方法。語法 object.prototype.name value 2.基於原型的繼承 obj2 和obj3都是函式foo的例項,可以看到每個例項不僅有自己自身的屬性,還具有原型鏈上的x 也就是foo.prototype 3.prototype與原型 通...

javascript中處理時間

var mydate new date mydate.getyear 獲取當前年份 2007 mydate.getfullyear 獲取完整的年份 2007 mydate.getmonth 獲取當前月份 0 11,0代表1月 11 mydate.getdate 獲取當前日 1 31 20 mydat...

javascript中處理時間

var mydate new date mydate.getyear 獲取當前年份 2007 mydate.getfullyear 獲取完整的年份 2007 mydate.getmonth 獲取當前月份 0 11,0代表1月 11 mydate.getdate 獲取當前日 1 31 20 mydat...