首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何判断函数对象是否是用胖箭头表达式创建的?

判断函数对象是否是用胖箭头表达式创建的,可以通过以下几种方式:

  1. 使用箭头函数的特性:胖箭头函数(也称为箭头函数)是ES6引入的一种新的函数定义方式,它使用箭头(=>)来定义函数,而不是传统的function关键字。胖箭头函数有以下特点:
    • 不绑定this:胖箭头函数没有自己的this值,它会继承外部作用域的this值。这意味着在胖箭头函数内部使用的this指向的是定义时所在的作用域的this,而不是调用时的this。
    • 没有arguments对象:胖箭头函数没有自己的arguments对象,但可以通过rest参数(...args)来获取传入的参数。
    • 不能作为构造函数:胖箭头函数不能使用new关键字来调用,因此不能用作构造函数创建对象。

因此,可以通过以下方式判断函数对象是否是用胖箭头表达式创建的:

  1. 使用函数的toString()方法:函数对象的toString()方法可以将函数转换为字符串。如果函数是用胖箭头表达式创建的,其toString()方法返回的字符串会包含"=>"箭头符号。可以通过判断函数字符串中是否包含"=>"来判断函数是否是用胖箭头表达式创建的。

示例代码:

代码语言:txt
复制
function isFatArrowFunction(func) {
  const funcString = func.toString();
  return funcString.includes("=>");
}

// 示例使用
const normalFunction = function() {
  console.log("This is a normal function.");
};

const fatArrowFunction = () => {
  console.log("This is a fat arrow function.");
};

console.log(isFatArrowFunction(normalFunction)); // false
console.log(isFatArrowFunction(fatArrowFunction)); // true
  1. 使用函数的constructor属性:函数对象的constructor属性指向创建该函数对象的构造函数。对于胖箭头函数,其constructor属性指向Function构造函数。可以通过判断函数的constructor属性是否等于Function来判断函数是否是用胖箭头表达式创建的。

示例代码:

代码语言:txt
复制
function isFatArrowFunction(func) {
  return func.constructor === Function;
}

// 示例使用
const normalFunction = function() {
  console.log("This is a normal function.");
};

const fatArrowFunction = () => {
  console.log("This is a fat arrow function.");
};

console.log(isFatArrowFunction(normalFunction)); // false
console.log(isFatArrowFunction(fatArrowFunction)); // true

以上是判断函数对象是否是用胖箭头表达式创建的两种常见方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

编写高质量箭头函数5个最佳做法

因此,箭头函数名称为 'increaseNumber'。 第1个实践: 一个好做法使用函数名称推断来命名箭头函数。 现在我们使用名称推断代码检查一个调试会话: ?...2.尽可能使用内联方式 内联函数仅具有一个表达式函数。 我喜欢箭头功能,可以编写短内联函数。...,一个好做法使用内联箭头函数格式 3.箭头和比较运算符 比较操作符>、=看起来类似于f箭头=>(它定义了箭头函数)。...第3个实践: 如果箭头函数包含操作符>、=,一个好做法表达式包装成一对括号,或者故意使用更长箭头函数形式。...总结 JS中箭头函数匿名。为了使调试更高效,一个好实践使用变量来保存箭头函数,这允许JS 推断函数名。 当函数主体具有一个表达式时,嵌入式箭头函数非常方便。

96740

箭头函数和常规函数之间 5 个区别

this 值 常规函数 在常规 JavaScript 函数内部,this 值(即执行上下文)动态。 动态上下文意味着 this 值取决于如何调用函数。...无论如何执行或在何处执行,箭头函数内部 this 值始终等于外部函数 this 值。换句话说,箭头函数可按词法解析 this,箭头函数没有定义自己执行上下文。...可以与常规函数相同方式从箭头函数返回值,但有一个有用例外。...常规函数 this 值动态,并取决于调用方式。箭头函数 this 在词法上绑定,等于外部函数 this。 常规函数 arguments 对象包含参数列表。...相反,箭头函数未定义 arguments(但是你可以剩余参数 ...args 轻松访问箭头函数参数)。 如果箭头函数有一个表达式,则即使不用 return 关键字也将隐式返回该表达式

54430

你不知道JavaScrpit(上卷) 随记(二)

使用new来调用函数,会自动执行: 创建一个全新对象 这个对象会执行[[prototype]]连接 这个新对象会绑定到函数调用this 如果函数没有返回其他对象,那么new表达式函数调用会自动返回这个新对象...new创建对象,不是隐式绑定obj1 /** 可以看到new绑定比隐式绑定优先级高。...new创建对象,不是显示硬绑定obj1 总结: 按顺序判断 函数是否在new中调用?...是的话this绑定新创建对象 函数是否通过call,apply调用? 是的话this绑定指定对象 函数是否在某个上下文对象中调用?...箭头函数不是使用function关键字定义,而是使用被称为“箭头操作符=>定义

31730

你不知道this(2)

但是这样函数非常罕见,JavaScript提供绝大多数函数以及你自己创建所有函数都可以使用call(..)和apply(..)方法。 这两个方法如何工作呢?...创建(或者说构造)一个全新对象 这个新对象会被执行 [ 原型 ] 连接 这个新对象会绑定到函数调用 this 如果函数没有返回其他对象,那么 new 表达式函数调用会自动返回这个新对象 我们现在关心第...),不过简单来说,这段代码会判断硬绑定函数是否被new调用,如果是的话就会使用新创建this替换硬绑定this。...箭头函数并不是使用function关键字定义,而是使用被称为"箭头"操作符 => 定义箭头函数不使用this四种标准规则,而是根据外层(函数或者全局)作用域来决定this。...小结 如果要判断一个运行中函数this绑定,就需要找到这个函数直接调用位置。找到之后就可以顺序应用下面这四条规则来判断 this绑定对象。 由new调用?绑定到新创建对象

49710

js 箭头函数详解

认识箭头函数 es6 新增了使用箭头(=>)语法定义函数表达式能力,很大程度上,箭头函数实例化函数对象与正式函数表达式创建函数对象行为相同。...任何可以使用函数表达式地方,都可以使用箭头函数: // 普通函数 let sum = function(a, b) { return a + b; } // 箭头函数 let sum1 =...箭头函数不能使用arguments 如果函数使用箭头语法定义,那么传给函数参数将不能使用 arguments 关键字访问: // 普通函数 let sum = function() { return...:22 原因箭头函数没有this,箭头函数this继承父执行上下文里面的this ,这里箭头函数执行上下文函数fn1(),所以它就继承了fn1()this,obj1调用fn1,所以fn1this...注意:简单对象(非函数没有执行上下文! 如果fn1也是个箭头函数呢?

1.2K10

让天下没有难学js之this到底是什么,怎么,这里可能给你答案

this 绑定问题就是被隐式绑定函数会丢失绑定对象,也就是说它会应用默认绑定,从而把 this 绑定到全局对象或者 undefined 上,取决于是否严格模式。...关于new调用函数如何执行,《你不知道JavaScript》一书中这么说 ❝ 使用 new 来调用函数,或者说发生构造函数调用时,会自动执行下面的操作。...,所以说,如果你在函数里返回了新对象,那么 new 表达式函数调用会自动返回这个我们手动创建对象,否则将返回自动创建那个对象,注意当函数返回了非对象和undefind、null时,bar依然等于我们创建那个实例...但是 ES6 中介绍了一种无法使用这些规则特殊函数类型:箭头函数箭头函数并不是使用 function 关键字定义,而是使用被称为“箭头操作符 => 定 义。...以上代码可以看出,箭头函数this指向取决于它所在作用域this,并且箭头函数无法被改变this指向,无论call还是new。

50730

《你不知道JavaScript》-- this(笔记)

; 4)如果函数没有返回其他对象,那么 new 表达式函数调用会自动返回这个新对象。...时,会构造一个新对象并把它绑定到 foo(...) 调用中 this 上。 3. 优先级 可以按照下面的顺序进行判断: 1)函数是否在 new 中调用(new 绑定)?...如果是的话,this 绑定创建对象; 2) 函数是否通过call、apply(显示绑定)或者硬绑定调用?...如果是的话,this 绑定指定对象; 3)函数是否在某个上下文对象中调用(隐式绑定)?...--箭头函数箭头函数不是使用 function 关键字定义使用被称为“箭头操作符 “=>” 定义箭头函数不使用 this 四种标准规则,而是根据外层(函数或全局)作用域来决定 this

26820

在 JavaScript 中轻松处理 this

在 Person 函数内部创建实例。 agent.getFullName() 返回 person 全名:'John Smith'。...为了确保方法中 this 指向正确对象,你必须: 以属性访问器形式执行该方法:agent.getFullName() 或将 this 静态绑定到包含对象(使用箭头函数,.bind() 方法等...箭头方法 上述使用手动上下文绑定方法需要样板代码。幸运,仍有改进空间。...你可以 JavaScript 类字段建议来定义箭头方法: 1class Person { 2 constructor(firstName, lastName) { 3 this.firstName...要静态绑定 this,你可以手动使用一个附加变量 self 来保存正确上下文对象。但是更好选择使用箭头函数,它天生被设计为按词法绑定 this。

2.4K20

校招前端二面经典面试题(附答案)_2023-03-02

创建执行上下文 创建执行上下文有两个阶段:创建阶段和执行阶段 1)创建阶段 (1)this绑定 在全局执行上下文中,this指向全局对象(window对象) 在函数执行上下文中,this指向取决于函数如何调用...语法:A instanceof B 如何判断?: 如果B函数显式原型对象在A对象原型链上,返回true,否则返回false。 注意:如果检测原始值,则始终返回 false。...函数 Number.isNaN 会首先判断传入参数是否为数字,如果数字再继续判断是否为 NaN ,不会进行数据类型转换,这种方法对于 NaN 判断更为准确。 await 到底在等啥?...不过按语法说明,await 等待一个表达式,这个表达式计算结果 Promise 对象或者其它值(换句话说,就是没有特殊限定)。...注意到 await 不仅仅用于等 Promise 对象,它可以等任意表达式结果,所以,await 后面实际可以接普通函数调用或者直接量

77340

字节跳动最爱考前端面试题:JavaScript 基础

this 如果函数没有返回其他对象,那么 new 表达式函数调用会自动返回这个新对象 问:new 一个构造函数,如果函数返回 return {} 、 return null , return 1.../valudOf 问:如何判断数组类型 Array.isArray 问: 函数arguments数组吗?...,bind了一个对象这个构造函数创建实例会继承这个对象属性吗?...,并且在此函数没有返回对象情况下,返回这个新建对象 (3)箭头函数和普通函数有啥区别?...(取决于调用者,和是否独立运行) 箭头函数使用被称为 “箭头操作 => 定义,箭头函数不应用普通函数 this 绑定四种规则,而是根据外层(函数或全局)作用域来决定 this,且箭头函数绑定无法被修改

1.4K20

JavaScript中箭头函数

前言 本文可以让你了解所有有关JavaScript箭头函数信息。我们将告诉你如何使用ES6箭头语法,以及在代码中使用箭头函数时需要注意一些常见错误。你会看到很多例子来说明它们如何工作。...在本例中,你必须在箭头符号(=>)之前添加一对空圆括号()。...这个推断name属性仍然不能作为一个适当标识符,你可以用它来指代函数本身--比如递归、解除绑定事件等。 如何处理this关键字 关于箭头函数,最重要一点它们处理this关键字方式。...}, created: () => { console.log(this.message); } }) // undefined 箭头函数没有arguments对象 有时,你可能需要创建一个具有无限参数个数函数...这意味着arguments对象箭头函数不可用

2.1K20

JavaScript函数和类

function add(x, y) { return x + y; } 函数参数传递时,如果传值则是传形参。如果对象,则是传引用(函数内部对对象改变对外部可见)。...函数表达式 虽然上面的函数声明在语法上一个语句,但函数也可以由函数表达式创建。这样函数可以是匿名;它不必有一个名称。...箭头函数表达式(也称箭头函数, fat arrow function)主要作用是函数表达式更为简洁。...箭头函数总是匿名箭头函数至少有一个参数时,可以省去小括号 当箭头函数只有一条语句时,可以省去大括号和return map = function(arr, fn) { const result...JavaScript类 基本使用 使用class关键字定义类 constructor方法构造方法 使用new关键字创建对象,参数为constructor方法参数 实例调用静态方法时候需要通过constructor

86831

【译】《Understanding ECMAScript6》- 第二章-函数

当然还有其他方法来处理参数数目不定函数,比如通过检查arguments.length来获取传参数量,以及逐个判断每个参数是否为undefined来弥补||不足。...比如使用bind()创建函数name属性bound前缀修饰;使用Function构造函数声明函数name属性anonymous前缀修饰: var doSomething = function()...箭头函数没有prototype属性,如果试图new操作符创建箭头函数实例将会抛出错误: var MyType = () => {}, object = new MyType(); // error...即使箭头函数并不是在其被创建作用域内被执行,但是根据语义绑定机制,arguments对象仍然保持着可访问性。 译者注:所谓容器函数箭头函数被定义位置函数作用域。...如何识别箭头函数 尽管箭头函数语法与普通函数不同,但是仍然可以使用常规方法来判断类型: var comparator = (a, b) => a - b; console.log(typeof

1.3K70

《你不知道JavaScript》 (上) 阅读摘要

但是如果非全局变量如果被遮蔽了,无论如何都无法被访问到。...判断this 我们可以根据优先级来判断 this: new 绑定: 函数是否在 new 中调用,如果是的话, this 绑定创建对象;var bar = new foo() 显式绑定:...函数是否通过 call、apply 或者硬绑定调用,如果是的话,this 绑定指定对象;var bar = foo.call(obj) 隐式绑定: 函数是否在某个上下文对象中调用,如果是的话...() 例外 被忽略情况: 比如把 null、undefined 作为 this 绑定对象传入 call、apply、bind ,那么这些值在调用时会被忽略,实际应用默认绑定; 箭头函数:...箭头函数根据外层作用域来决定 this,且箭头函数绑定无法被修改,new 也不可以;

52120

前端面试比较好回答

obj方法b使用箭头函数定义,这个函数this就永远指向它定义时所处全局执行环境中this,即便这个函数作为对象obj方法调用,this依旧指向Window对象。...但是由于箭头函数时没有自己this,且this指向外层执行环境,且不能改变指向,所以不能当做构造函数使用。(6)箭头函数没有自己arguments箭头函数没有自己arguments对象。...(取决于调用者,和是否独立运行)箭头函数使用被称为 “箭头操作 => 定义,箭头函数不应用普通函数 this 绑定四种规则,而是根据外层(函数或全局)作用域来决定 this,且箭头函数绑定无法被修改...] 方法,创建一个实例对象,然后再执行这个函数体,将函数 this 绑定在这个实例对象上当直接调用时,执行 [Call] 方法,直接执行函数箭头函数没有 [Construct] 方法,不能被用作构造函数调用...如何创建 web worker:检测浏览器对于 web worker 支持性创建 web worker 文件(js,回传函数等)创建 web worker 对象画一条0.5px线采用transform

1K30
领券