【问题标题】:Create a "global method" (?) in Javascript在 Javascript 中创建一个“全局方法”(?)
【发布时间】:2014-03-30 23:35:36
【问题描述】:

我想知道如何编写一个以. 为前缀的方法,如.join() [for arrays] 这样对于我拥有的任何 [string-type] 变量我都可以这样做

var myString.editAt(index)

无需忍受烦人且视觉上不和谐的editAt(myString,index)

在查找此问题的答案时(我不确切知道如何表达它,这对我的搜索没有帮助),我发现所有似乎都是特定的(?)引用对象的方式 -也就是说,具有给定变量名的变量名,以及 new 构造函数存在问题,我将其用作许多代码的基本部分。

我不完全确定这是否意味着我想要一个与类或对象关联的方法。

请记住,我可能没有用正确的技术术语来问这个问题——更多的是出于好奇而学习的问题,而不是任何东西。谢谢。

【问题讨论】:

  • 您正在寻找扩展原型。
  • 当然是这样,但是,例如,我们需要知道您的新方法应该做什么,以及您要扩展哪个原型。
  • 它是“突变 DNA 序列”,即在指定字符索引处更改字符串。除了substr(start)+change+substr(the rest),JS 没有其他选择,我一直在寻找一种方法来避免在此过程中编写非常丑陋的代码

标签: javascript methods


【解决方案1】:

这是您可以使用原型向现有 Javascript 对象动态添加功能的方法。这只是一个随机示例,您需要使用与子字符串不同的方法。

if (typeof String.prototype.editAt !== 'function') {
    String.prototype.editAt = function(index) {
        return this.substring(index);
    };
}

var myString = "hello";
var editString = myString.editAt(1);

【讨论】:

  • 没有子字符串正是我想要的!好吧,substr() 干杯!
  • 对于虚拟记录,执行此操作的最终代码如上,除了function(index,mut) {return this.substr(0,index)+mut+this.substr(index+1,this.length); } :)
  • @Immx - 还应该注意的是,不建议扩展内置对象,因为它会破坏对象属性的枚举,可能会干扰 ECMAScript 的未来扩展,并且可能会干扰扩展其他人在同一空间编码。但是,这些可能不是您关心的问题。
  • @RobG Breaking encapsulation 是我认为的术语和参考:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…
猜你喜欢
  • 2014-10-31
  • 2012-08-26
  • 1970-01-01
  • 2020-03-04
  • 2021-10-18
  • 2021-12-11
相关资源
最近更新 更多