Как изменить значение String из String.prototype? - PullRequest
0 голосов
/ 28 апреля 2020

Я написал этот код:

String.prototype.toJadenCase = function () {
  return this.split(/\s/).map(word => word[0].toUpperCase() + word.substr(1)).join(' ')
}

let text = 'hello world'
text.toJadenCase()
alert(text) // hello world

И это не меняет значение строки, от той функции, которая вызывается is. Как я увидел здесь: Прототип строки, изменяющий строковое значение , должен работать, но не работает

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Изменить text.toJadenCase() на let text = 'hello world'.toJadenCase()

String.prototype.toJadenCase = function() {
  return this.split(/\s/).map(word => word[0].toUpperCase() + word.substr(1)).join(' ')
}

let text = 'hello world'.toJadenCase()
console.log(text)
0 голосов
/ 28 апреля 2020

Вы не можете изменить значение строки, строки неизменны. Все, что вы можете сделать, это создать новую строку и вернуть ее:

    text = text.toJadenCase()
//  ^^^^^^^

String.prototype.toJadenCase = function () {
  return this.split(/\s/).map(word => word[0].toUpperCase() + word.substr(1)).join(' ')
}

let text = 'hello world'
text = text.toJadenCase()
alert(text) // hello world

Примечание: для String.prototype это менее важно, чем для некоторых других, но лучше всего определять все, что вы добавляете во встроенные прототипы (если вы вообще добавляете к ним что-нибудь) как не перечисляемый , который используется по умолчанию при использовании Object.defineProperty:

Object.defineProperty(String.prototype, "toJadenCase", {
    value: function () {
        return this.split(/\s/).map(word => word[0].toUpperCase() + word.substr(1)).join(' ');
    },
    writable: true,
    configurable: true
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...