我如何在原型工作中得到“this = this”

2023-12-02

好吧,偷看,所以我知道弄乱原型是不好的做法,但无论如何......


Array.prototype.rev=
    function(){
        this.reverse();
    }

工作正常!更新源数组变量,ary,如预期,例如:

ary = [123, 456];
ary.rev();

// result:  ary == [456, 123]

当我为以下对象编写类似的属性时,我的问题就出现了String.

我想做的是这样的事情......

String.prototype.rev=
    function(){
        this.split('');
        this.reverse();
        this.join('');
    }

看起来很简单吧!分割字符串,反转它,然后将其重新连接在一起,这样原始字符串变量,str,是它以前的自我的反转,就像ary above!

事情是:虽然this.split()已被调用,它需要存储为变量,即:

split = this.split('');

这就是this = this问题...

Now split定义后,它会将焦点从编辑源变量上移开,而且我不能在函数末尾说:

this = split;

As this是“不可变的”还是当它们意味着它是静态的且不可更改时它是什么?


进入正题吧!我的问题是……

str = 'abc'

我希望能够说str.rev() not str = str.rev()并得到结果str = 'cba' where str === 'cba',明白我的意思了吗?!

所有的解决方法和学费欢迎偷看,我只是要求你知道你在说什么。谢谢


当我为以下对象编写类似的属性时,我的问题就出现了String...

这里的主要问题是字符串是不可变的在 JavaScript 中;您无法就地更改字符串。因此,不可能定义一个rev行为如下的方法:

var a = 'abc';
a.rev();        // <== This can't work this way
console.log(a); // cba

相反,你的rev应该做所有其他事情String方法做:Return包含更新的新字符串。

第二个问题是你的代码rev方法不起作用,因为你没有保存类似的结果this.split('');任何地方,但方式split有效,它returns包含条目的数组。

这是一个版本rev解决了这两个问题:

String.prototype.rev=
    function(){
        return this.split('').reverse().join('');
    };

Then:

var a = 'abc'.rev();
console.log(a);  // cba

Example:

String.prototype.rev = function(){
  return this.split('').reverse().join('');
};

var a = 'abc'.rev();
snippet.log(a);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

这就是所有标准字符串方法(toLowerCase, replace, substring, ...) 工作,通过返回结果。


全在线版本可能不是非常清晰(并且很难调试),为了清楚起见,这里是拆分版本:

String.prototype.rev=
    function(){
        var characters = this.split('');
        characters.reverse();
        return characters.join('');
    };

(注意Array#reverse就地反转数组and返回数组引用;事实上它还返回数组引用,这使得一体化版本成为可能。)


旁注:如果您要尝试原型,请考虑使用Object.defineProperty而不仅仅是分配:

Object.defineProperty(String.prototype, "rev", {
    value: function() { ... }
});

...这样新属性是不可枚举的(不会出现在for-in循环)。没有那么重要String,但是很多人still错误使用for-in用于循环数组,所以...

Example:

Object.defineProperty(String.prototype, "rev", {
  value: function(){
    return this.split('').reverse().join('');
  }
});

var a = 'abc'.rev();
snippet.log(a);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我如何在原型工作中得到“this = this” 的相关文章

  • Angular $http.get:如何捕获所有错误?

    我发送一个表单到nodejs进行身份验证 使用 http get在以下函数中并添加promise gt then 在生产中 这是否可以处理我可能从服务器收到的所有错误 我还需要向此功能添加其他内容吗 MyApp controller Log
  • 单击时获取元素的 id(php、jquery、ajax、javascript)

    抱歉 这是我的第一个项目 我学到了很多东西 因此 如果有人可以帮助我 我将不胜感激 我的项目中有这个侧边栏 其中包含 rss 链接 我必须使用 ajax 因此每次用户单击任何 rss 链接时 提要都会出现在屏幕上 这是我的侧边栏代码 div
  • ScrollTop 在 Chrome/Safari 中不起作用

    我的网站上有一个循环内的表单 当有人提交表单时 查询字符串会添加到 URL 中 例如 updated 111 然后 我的 JQuery 脚本检查数字的 url 并在提交表单并重新加载页面后滚动到该 div 该脚本在 Firefox 中运行良
  • 整个页面都是玻璃板

    有没有一种简单的方法可以在整个 HTML 页面上拥有一个 玻璃窗格 而不管缩放 幻灯片事件 平台 浏览器 移动 桌面 我所说的 简单 是指纯 CSS 支持 而不是插件 后备 插件建议也可能有用 Thanks 如果您只是指所有内容之上的一层
  • 重新排序 Magento JavaScript 包含 (addJs)

    我会保持简单 在我的产品页面上 我需要删除prototype js 文件并将其替换为最新版本的prototype 到目前为止 我已经使用 local xml 成功替换了它
  • 流媒体性能 - Canvas 与

    我正在开发一个应用程序 需要通过 webSocket 连接以每秒至少 30 帧的速度持续传输图像 我遇到了一些性能问题 并希望尽我所能进行优化 我想知道使用不断更新的图像之间的性能差异是什么 就像这样 img src someDynamic
  • Javascript 自时间戳以来经过的时间

    我试图通过将其存储在变量中来 缓存 一些信息 如果 2 分钟过去了 我想获取 实时 值 调用 url 如果 2 分钟还没有过去 我想从变量中获取数据 我基本上想要的是 if time passed is less than 2 minute
  • 为什么我的箭头函数有原型属性?

    正如文档中提到的https developer mozilla org en docs Web JavaScript Reference Functions Arrow functions https developer mozilla o
  • 如何使用 console.log 省略文件/行号

    如今 您可以在 Chrome 的控制台中编写非常好的东西 查看this https developer chrome com devtools docs tips and tricks关联 我也做了一个截图 正如您在屏幕截图中看到的那样 文
  • 强制执行 show.bind

    我有一个包含数据的表 当从另一个视图触发事件时 我希望视图检查 show bind 语句 问题是该事件没有更改当前视图中的任何数据 foo html tr p canBeRemoved p tr 我正在使用 EventAggregator
  • jQuery 中如何判断 JSON 对象是否为空

    我有以下 JSON meta limit 20 next null offset 0 previous null total count 0 objects 我对对象感兴趣 我想知道对象是否为空并显示警报 像这样的东西 success fu
  • React JS“this”没有按预期工作

    我有下面的代码 save function var this this console log this refs itemText this setState isEditing false function console log In
  • Backbone.js 应用程序可以逐步增强并可供搜索引擎抓取吗?

    我需要为我的下一个项目实现一个 MVC JavaScript 框架 但它既是一个网站 又是一个 Web 应用程序 是否可以公开数据服务器端 然后解析 URL 以显示 JS 版本 我计划使用 Rails 作为服务器端代码 我写了一个关于这个主
  • 上传前如何检查图片的宽度和高度

    对于图片上传 我编写了以下 html 代码
  • Webpack:如何将 javascript 注入 HTML 而不是单独的 JS 文件

    有没有办法让 webpack 将输出注入 HTML 而不是单独的文件 我不得不使用html webpack inline source plugin https github com DustinJackson html webpack i
  • 如何与使用 child_process.spawn 创建的新创建的服务器交互

    我正在尝试为我的私人托管的 反恐精英全球攻势 服务器制作一个前端 当我点击运行服务器时 在前端 一切正常 服务器启动并记录到控制台 但是如何查看服务器IP地址 服务器中的玩家等信息呢 这是我到目前为止运行服务器的内容 router post
  • 限制线的长度

    我正在尝试画一条代表 弹弓 的线 并且希望它具有最大拉伸长度 在 p5 中 我在位置和位置之间画了一条线 line posA x posA y posB x posB y posA 是鼠标 x 和 y posB 是画布上圆的位置 我想要做的
  • .parents() 没有 jquery - 或 querySelectorAll 为父母[重复]

    这个问题在这里已经有答案了 可能的重复 使用 matchesSelector js 检查 event target parentElement https stackoverflow com questions 12977658 check
  • 在 Sublime Text 下获取完整的 JS 自动补全

    我刚刚在 Windows Vista 下安装了 Sublime Text 甚至遵循了中给出的建议这个帖子 https stackoverflow com questions 10636410 modifying sublime text 2
  • 保留对 React 状态变量的“引用”

    据我所知 Javascript 中没有指针 我有以下问题 但我想知道是否有一个解决方案让我无法解决 解决方案可能是普通的 Javascript 或者像 Context API 这样的 React js 钩子 useContext 或者更多

随机推荐

  • 在 web.xml 中包含文件

    我正在为 JEE5 Web 服务编写单元测试 Web 服务的行为取决于在web xml文件 因此我想分割我的web xml分为恒定部分和在测试运行之间变化的部分 为了看看这是否真的可能 我尝试看看是否可以将welcome file list
  • 代码不断超时

    因此 我们得到的这组代码由于某种原因一直超时 它运行的不是存储过程 因为它运行良好 另外 如果我们从 C 代码中删除该参数 代码就会运行 该参数不断中断 导致超时 我们无法找出原因 c public static PTWViewList G
  • 用于提取两个指定行之间的行的批处理脚本

    我有一个文本文件 想使用 Windows 批处理脚本提取两个指定行之间的所有行 第 1 行 FILE FORMAT ADS 第2行 VERSION 1 0 LineX 父 子 IsPrimary 该行以 开头并且很长 LineY Prope
  • 空字符串的内存表示

    空字符串如何存储在内存内部 我正在考虑一个空字符串内存表示 但无法完全理解它 它有特定的 ASCII 值吗 空字符串到底是什么 A String对象是一个JavaObject和其他人一样 它是一个具有长度属性的对象 最终作为 Java 对象
  • 如何在matplotlib上生成一系列直方图?

    我想生成一系列直方图 如下所示 上面的可视化是在张量流中完成的 但我想在 matplotlib 上重现相同的可视化 编辑 使用 SpghttCd建议的plt fill Between 我有以下代码 colors cm OrRd r np l
  • 如何通过 jQuery 将文件发送到 php?

    我尝试通过 jQuery 将文件发送到 PHP 文件进行处理
  • php preg_replace - 保留指定字符+外语字母[重复]

    这个问题在这里已经有答案了 我需要一个从字符串中删除所有字符 未在模式中列出 但保留外语字母 的函数 我知道 preg replace 有 p 模式 但由于某种原因我无法让它工作 我使用这个函数来删除字符串中的所有垃圾 main conte
  • 动态图片绑定vue

    我想做与这里相同的事情 但我想使用 images sample 作为参数 例如props images sample
  • Schema.org:使用什么,微数据还是 JSON-LD?

    数据标记Schema org对于 Google Yahoo Bing 和 Yandex 等搜索网站来说 片段非常适合 然而 我认为大多数网站管理员都使用微数据 但几乎从不使用JSON LD 最近了解了JSON LD 有一些疑惑 我可以在没有
  • SQL:如何按两列的唯一组合进行分组?

    Context A table message有列from user id and to user id 用户应该看到最近的对话以及显示的最后一条消息 一个对话由多条消息组成 这些消息具有相同的用户 ID 组合 用户发送消息 用户接收消息
  • Python 相当于 MATLAB 的“ismember”函数

    经过多次尝试优化代码后 最后一个资源似乎是尝试使用多个内核运行下面的代码 我不确切知道如何转换 重新构造我的代码 以便它可以使用多个内核运行得更快 如果我能获得实现最终目标的指导 我将不胜感激 最终目标是能够针对数组 A 和 B 尽可能快地
  • 在 JavaScript 中用正则表达式替换字符串

    一个特定的正则表达式现在困扰着我 我只是想更换范围 100像这样的字符串 var string commonstringblabla b range 100 b stringandsoon with commonstringblabla b
  • Git 预提交挂钩

    我是 git hooks 的新手 我无法理解下面的预提交挂钩 谁能告诉我这是如何工作的 这里我怀疑 grep 将如何在提交的文件中发生 因为我们不会将这些文件带到任何地方 抱歉 如果我问错了问题 但请帮助我理解 git hooks usr
  • 外部服务的 Kubernetes 入口规则

    这个问题类似于question但这更多的是围绕可以配置的规则中的路径 入口应该能够处理内部服务和外部服务 外部服务的 URL 应该类似于http 主机名 80 es 当用户点击此 url 时 应将其重定向到外部服务 服务定义和入口规则配置如
  • 在android中从sdcard中删除文件

    我正在制作一个应用程序 其中我必须删除 SD 卡中最近添加的 mp3 文件 歌曲保存的格式为 Songhello 17 26 amr where 17 26是添加歌曲的时间 谁能帮我如何删除SD卡中最近添加的文件 我的意思是说我想删除时间意
  • 如何在涉及链接的 Access 中连接多行?

    我的 Access 数据库存在以下问题 我有 3 个表 分别是 tblComponents tblErrors 和 linkComponentsErrors 这是一种多对多关系 这意味着一个组件可以有多个错误 而一个错误可以有多个组件 这些
  • 数字文字末尾的 F 和 D 是什么意思?

    我见过一些这样的符号 但我找不到任何奇怪的地方 double d 5D float f 3 0F 5后面的D和F到底是什么意思 意味着这些数字分别是双精度数和浮点数 假设你有 void foo int x void foo float x
  • 如何重新排列 PDF 文件的页面顺序?

    我最后正在生成目录 我想将目录移动到开头 假设我的 PDF 有 16 页 目录从第 13 页开始到第 15 页结束 我想将目录移至第二页 这样第一页仍为第 1 页 最后一页仍为第 16 页 这段代码没有给我我想要的 public void
  • 如何从 aframe 中的 3D 对象获取边界框信息?

    我正在开发一个 aframe 项目 该项目涉及将未知大小的 3D 对象加载到我的场景中 当然 在将对象放入场景之前 我希望将其大小调整到一定的大小 例如固定高度 但是如何从对象的边界框中提取宽度 高度和深度等信息呢 您需要在此处使用 A F
  • 我如何在原型工作中得到“this = this”

    好吧 偷看 所以我知道弄乱原型是不好的做法 但无论如何 Array prototype rev function this reverse 工作正常 更新源数组变量 ary 如预期 例如 ary 123 456 ary rev result