Как создать пользовательскую функцию, аналогичную string.split () для обращения строки - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь написать функцию, для которой, если мы передадим строку, как мы делаем для split, она возвращает строку, которая обратная -

Это то, что я пробовал -

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

Я жду олле, а скорее получаю -

VM1179: 4 Uncaught TypeError: Невозможно прочитать свойство split из undefined в String.reverser (: 4: 19) в 7: 14

Ответы [ 2 ]

2 голосов
/ 23 июня 2019

Вам не нужен параметр 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)
0 голосов
/ 23 июня 2019

При расширении String.prototype с помощью функции reverser() к строке с новым методом можно получить доступ с помощью 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);
...