JavaScript ecma6 将普通函数更改为箭头函数

2023-11-25

我有那个代码:

function defineProperty(object, name, callback){
    if(object.prototype){
        Object.defineProperty(object.prototype, name, {"get": callback});
    }
}
defineProperty(String, "isEmpty", function(){return this.length === 0;});

我使用它如下:

console.log("".isEmpty, "abc".isEmpty);

它返回:

true, false

现在,我想将函数更改为如下所示:

defineProperty(String, "isEmptyWithArrow", () => this.length === 0);

但“this”指的是Window,我不知道如何更改它。

我的小提琴


你不能。这是不可能的。this箭头函数是词法作用域的,这是它们的突出特点。但是你need动态绑定this,这就是function是有好处的。

如果您坚持使用新奇的 ES6 功能,请选择方法定义:

function defineProperty(object, name, descriptor) {
    if (object.prototype)
        Object.defineProperty(object.prototype, name, descriptor);
}
defineProperty(String, "isEmpty", {get(){return this.length === 0;}, configurable:true});

当然,您也可以采用回调来获取实例作为参数:

function defineProperty(object, name, callback) {
    if (object.prototype)
        Object.defineProperty(object.prototype, name, {
            get(){ return callback(this); }, // dynamic this
            configurable: true
        });
}
defineProperty(String, "isEmpty", self => self.length === 0);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript ecma6 将普通函数更改为箭头函数 的相关文章

随机推荐

  • 如何在 Visual Studio 2013 中安装 WindowsAzure.Storage?

    注 这个answer没有帮助我 因为我没有相同的 dll System Collections Immutable 1 1 37 我正在使用 Visual Studio 2013 和 net 4 5 并遵循本教程 开始使用 NET 使用 A
  • 尝试从定义的日期减去 5 天 - Google App Script

    我正在尝试编写一个脚本 该脚本应该发送电子邮件并在提交表单时创建两个日历条目 老实说 这是我的第一个脚本 我很高兴电子邮件已发出并且日历条目也能正常工作 让我头疼的是从定义的日期中减去 5 天 实际上是 x 天 首先我想我可以简单地做类似的
  • Android中启动Service会调用Applications onCreate

    我正在启动一个 android 服务 startService getApplicationContext MyService class 我已经在 AndroidManifest xml 中正确定义了我的服务 现在 我从应用程序创建中调用
  • std::sort 如何处理对列表?

    为什么this include
  • 如何为约束布局上的嵌套视图设置动画?

    我有一个要求 视图需要位于底部中心并根据其内容调整高度 于是创建了constraint layout根内constraint layout为了达成这个 但现在我面临动画的问题 我无法申请constraintSet
  • 搜索函数源代码

    在 R 中 您可以将函数的源视为函数只是另一个对象 我正在寻找一种方法来搜索此源代码 而不知道源代码保存在哪个文件中 例如 我可能想知道该函数是否shapiro test包含函数sort 确实如此 If shapiro test是我要使用的
  • 在 iPhone 应用程序中将单个像素直接绘制到屏幕上的最快方法是什么?

    我正在寻找在 iPhone 应用程序中将数千个单独计算的像素直接绘制到屏幕上的最快方法 该应用程序的性能非常好 最有可能使用 OpenGL 例如 glBegin GL POINTS glColor3f glVertex3f glEnd 甚至
  • Mac 上的 cronjobs 入门

    我正在尝试熟悉 cron 作业 我想我已经了解了基本的想法 调度 语法等 但是 我似乎无法在我的 mac 上使用终端来正确地完成它 我到底在哪里可以找到定时任务 我应该如何引用脚本的路径 我想做的是在远程机器上点击 php 脚本 http
  • CSS 中不断扩展的中间体

    我将如何设计一个具有固定高度的页眉和页脚 附加到浏览器窗口的顶部和底部 但中间可扩展的网站 滚动条仅适用于中间 图中的橙色部分 因此页面的其余部分永远不需要滚动 为了更清楚地解释 我在下面画了一个模型 理想情况下 它需要完全用 CSS 和
  • 如何在 SSRS 报告中创建动态列

    I need to create a SSRS report like 我有 3 列的表格开发者名称 工作时间 日期 如何创建报告以及获取数据的 sql 查询是什么 我不要求完整的 SQL 查询 我只需要一些提示 您可以使用 Matrix
  • Python 重新“伪造转义错误”

    我一直在摆弄 python re 模块 search方法 cur是来自 Tkinter 条目小部件的输入 每当我在条目小部件中输入 时 它都会引发此错误 我不太确定错误是什么或如何处理它 任何见解将不胜感激 cur是一个字符串 tup 0
  • SevenZipSharp - 压缩内存流

    我正在使用 SevenZipSharp 将文件压缩为 zip 文件 有没有办法使用它从内存流创建 zip 也就是说 之前将文件加载到内存流中 谢谢 玛雅 我正在使用 SevenZipSharp 来处理流 没有任何问题 SevenZip Se
  • 这个标志到底意味着什么? |=

    我很想了解这个运营商 我在 Java 中设置标志时见过这种表示法 例如 notification flags Notification FLAG AUTO CANCEL 它是否执行某种位操作 这个标记到底有什么作用 还有其他类似的众所周知的
  • 如何在android中打开特定的短信

    有没有办法用特定的短信在android上打开消息传递活动 threadId应该是您要查看的 SMS MMS 线程的 id Intent defineIntent new Intent Intent ACTION VIEW defineInt
  • 是否可以输入多种类型的提示?

    我可以使用类型提示允许两种不同的类型吗 例如 范围 requester可以是以下任一者User or File function log User File requester 从 PHP 8 0 开始 这将是可能的包含联合类型 The 该
  • Subversion:合并时“目标路径不存在”是什么意思?

    使用 subversion 1 5 我有分支 B 它是从分支 A 分支出来的 在两个分支中完成工作后 我将更改从 A 合并到 B 中 使用svn merge http path to A在B 的工作目录中并得到svn Target path
  • 为什么在结构体的构造函数中设置属性不起作用?

    我有以下不允许的代码 下面的错误 为什么 struct A private int b public A int x B x public int B get return b set b value 我收到以下错误 在分配 this 对象
  • 如何让 Matlab 读取正确数量的 xml 节点

    我正在使用 matlab 的 xmlread 内部函数读取一个简单的 xml 文件
  • MapView.onMapReady 从未在 Fragment 中调用以在 MapView 中加载 Google 地图

    我将尝试在 Android 应用程序中的名为的片段上显示地图RoeteFragment 如果我调试我的代码 我会看到该方法onMapReady永远不会被调用 因此地图不会加载 该片段实现了OnMapReadyCallback喜欢需要并且在o
  • JavaScript ecma6 将普通函数更改为箭头函数

    我有那个代码 function defineProperty object name callback if object prototype Object defineProperty object prototype name get