【问题标题】:How to create a custom function similar to string.split() to reverse a string如何创建类似于 string.split() 的自定义函数来反转字符串
【发布时间】:2019-06-23 17:23:41
【问题描述】:

我正在尝试编写一个函数,如果我们像拆分一样传递字符串,它会返回一个反转的字符串 -

这是我尝试过的 -

var abc = "hello"
var result;
String.prototype.reverser = function(str){
  var temparr = str.split('').reverse().join('');
  return temparr;
}
result = abc.reverser();
console.log(result);

我期待 olleh 但更希望得到 -

VM1179:4 未捕获的类型错误:无法读取未定义的属性“拆分” 在 String.reverser (:4:19) 在:7:14

【问题讨论】:

  • 您没有将字符串传递给reverser

标签: javascript object prototype


【解决方案1】:

您不需要参数str。该字符串已经绑定到原型上的方法。只需使用this 即可访问字符串。

var abc = "hello"
var result;
String.prototype.reverser = function(){
  return this.split('').reverse().join('');
}
result = abc.reverser();
console.log(result);

注意:您不应该直接将可枚举属性添加到prototype。而是使用Object.defineProperty()

var abc = "hello";
Object.defineProperty(String.prototype,'reverser',{
  value:function(){
    return this.split('').reverse().join('');
  }
})
var result = abc.reverser();
console.log(result)

【讨论】:

  • 感谢这工作!我可以使用任何文档或网站来阅读有关此内容的更多信息吗?
  • 这将是使用Object.defineProperty 的一个很好的教学时刻,而不是在内置原型上创建可枚举的属性,这是一个坏主意™。 :-)
  • @T.J.Crowder 我已经添加了。我可以猜到为什么它对对象和数组不利。但是字符串的副作用是什么?
  • 谢谢大家!我发现这篇文章为什么对于像我这样阅读这篇文章的人来说这是一个坏主意 - stackoverflow.com/questions/14034180/…
  • @MaheerAli - 你永远不知道什么时候有人会有一个实际的 String 对象(不是原始对象)并决定在其上使用 for-in 循环。 :-) 人们做的事情很有趣...
【解决方案2】:

当使用reverser() 函数扩展String.prototype 时,可以使用this 访问带有新方法的字符串;您定义它的方式需要一个未提供的参数(str)。了解如何使用 this 访问此工作片段中的字符串:

var abc = "hello"
var anotherStr = "what do you know?"
var result;
var anotherResult;

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

result = abc.reverser();
anotherResult = anotherStr.reverser();

console.log(result);
console.log(anotherResult);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多