资讯专栏INFORMATION COLUMN

JavaScript中怎么不带括号的调用函数

HmyBmny / 1927人阅读

(1)作为构造器调用

利用new关键字可以不带括号地调用函数:

function Greet() {

    console.log("hello");

}

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

new操作符的语法为:

new constructor[([arguments])]

(2)隐性实现 toString 或者 valueOf 的调用

另一个例子就可以隐性调用toString或者valueOf方法:

var greet = {

    toString: function() {

         return "hello";

    }

}



greet + ""; // 字符串连接会强制性转化到String类型,这样就隐性调用了toString

可以利用这种方式调用任意的函数:

function func() {

    console.log("hello");

}



var greet = {

    toString: func

}



greet + "";

或者使用 valueOf:

function func() {

    console.log("hello");

}



var greet = {

    valueOf: func

}



+greet;

如果要使用valueOf的话,可以在Function的原型中完成复写,这样也能完成一个函数的传递:

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

可以利用*操作符创建一个迭代器,然后在下一个元素被遍历的时候就会被自动调用了:

function* func() {

    console.log("hello");

}



var greet = {};

greet[Symbol.iterator] = func;



[...greet];

一般来说用迭代器的时候都会附带一个yield语句,但是在这边希望调用某个函数的时候不一定要加上这个语句。上述代码中是最后一个语句调用了函数,同时也可以利用解构赋值来进行调用

[,] = greet;

或者使用for ... of结构:

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 对象替换成一个你自定义的全局对象。

(5)Tagged Template Literals

ES6中可以利用模板字符串的方式调用:

function greet() {

    console.log("hello");

}



greet``;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78900.html

相关文章

  • js骚操作骂人不带

    摘要:让我们快速的复习一下在中一共有两种类型的值原始值和对象值原始值有布尔值数字还有字符串其他的所有值都是对象类型的值包括数组和函数类型转化先按运算符来分一下类减号,乘号,肯定是进行数学运算,所以操作数需转化为类型。 前言 很多小伙伴们觉得javaScript很简单,下面的这行 javaScript代码可能会让你怀疑人生。 (!(~+[])+{})[--[~+][+[]]*[~+[]] +...

    Sunxb 评论0 收藏0
  • JavaScript深入浅出

    摘要:理解的函数基础要搞好深入浅出原型使用原型模型,虽然这经常被当作缺点提及,但是只要善于运用,其实基于原型的继承模型比传统的类继承还要强大。中文指南基本操作指南二继续熟悉的几对方法,包括,,。商业转载请联系作者获得授权,非商业转载请注明出处。 怎样使用 this 因为本人属于伪前端,因此文中只看懂了 8 成左右,希望能够给大家带来帮助....(据说是阿里的前端妹子写的) this 的值到底...

    blair 评论0 收藏0
  • 进击 JavaScript(五) 之 立即执行函数与闭包

    摘要:匿名函数是不能单独写的,所以就提不上立即执行了。六立即执行函数在闭包中的应用立即执行函数能配合闭包保存状态。来看下上节内容中闭包的例子现在,我们来利用立即执行函数来简化它第一个匿名函数执行完毕后,返回了第二个匿名函数。 前面的闭包中,提到与闭包相似的立即执行函数,感觉两者还是比较容易弄混吧,严格来说(因为犀牛书和高程对闭包的定义不同),立即执行函数并不属于闭包,它不满足闭包的三个条件。...

    vincent_xyb 评论0 收藏0
  • 带你入门 JavaScript ES6 (三)

    摘要:上一章我们学习了遍历和扩展字符语法。本章我们主要学习中的箭头函数箭头函数更准确来说叫箭头函数表达式。箭头函数余普通函数功能相同,但语法差别比较大。 带你入门 JavaScript ES6 (三) 本文同步带你入门 JavaScript ES6 (三),转载请注明出处。 上一章我们学习了 for of 遍历和扩展字符语法。本章我们主要学习 ES6 中的箭头函数 箭头函数 更准确来说叫 箭...

    刘福 评论0 收藏0
  • 【愣锤笔记】一支穿云箭、正则来相见

    摘要:表示进行多行匹配。如果正则表达式中含有子表达式,那么该数组后续的项依次为匹配到的第一个子表达式的匹配结果,第二个第个。关于正则方法有一点必须要提,很容易导致错误的情况。这时候直接使用该正则表达式对进行方法调用,却返回了。匹配前一项至少次。有人说,一行正则抵得上100行代码……正则表达式,每门语言都有,在我们的js开发中,最常见的使用场景:一是表单验证,像是登录注册啊,用户输入检测啊,不管在前...

    wangbjun 评论0 收藏0

发表评论

0条评论

HmyBmny

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<