プロトタイプ的にString
などのクラスにメソッドを追加するのは非常に簡単です。ただし、これはグローバルスコープ内のすべての文字列に影響します。スコープ内の文字列プロトタイプのみに付属する関数
"foo".bar()
のようなすべての文字列リテラルからアクセス可能なメソッドを追加するにはどうすればよいのですか?つまり、そのメソッドはES6クラスのスコープ内でしかアクセスできません。
プロトタイプ的にString
などのクラスにメソッドを追加するのは非常に簡単です。ただし、これはグローバルスコープ内のすべての文字列に影響します。スコープ内の文字列プロトタイプのみに付属する関数
"foo".bar()
のようなすべての文字列リテラルからアクセス可能なメソッドを追加するにはどうすればよいのですか?つまり、そのメソッドはES6クラスのスコープ内でしかアクセスできません。
私はあなたがそれを行うことができない恐れがあります。また、それは悪い考えのように思える。 通常の機能を使っている方が良いでしょう。いいえ:bar("foo")
これはできません。文字列はプリミティブです。それらはオブジェクトのように使用されているのでString
インスタンスに強制されます(したがって、String.prototype
メソッドを使用できます)。この動作はスコープに依存しません。
class Superstring extends String {
bar() {
return `${this} bar`;
}
}
にとっては可能
new Superstring('foo').bar();
または
const bar = (str) => Superstring.prototype.bar.call(str);
bar('foo');