1

ここでJS初心者の質問:

これらのばかげた例のように、文字列操作のためのいくつかの簡単な方法があるとしましょう:

var prepend = function(str) {
  return 'foo ' + str
};

var exclaim = function(str) {
  return str + '!'
}

今、私はこれらを次のように使用できます:

var string = prepend('bar'); // 'foo bar'
string = exclaim(string); // 'foo bar!'

ただし、オプションでこれらのメソッドをチェーン可能にすることもできれば、本当に素晴らしいと思います。そのため、次のようなこともできます。

var string = "foo"
string.prepend().exclaim()

...そして私はまだ"foo bar!"私の結果として得ます。

次のように、オプションの引数をこのチェーンに渡すこともできればさらに良いでしょう。

var exclaim = function(string,char="!") {
  return string + char
};

だから、私の質問は次のとおりです。

  1. とても基本的ですが、私はこれを正しく説明していますか?このように連鎖できるメソッドを何と呼びますか?そして、チェーン内の前のメソッドの戻り、この次のメソッドが動作するものを何と呼びますか?

  2. 変数をチェーン内の前のメソッドの戻り値にするか、引数として提供するように設定するにはどうすればよいですか?

ありがとう!

4

3 に答える 3

3

それらをチェーンしたい場合は、これらのメソッドを文字列プロトタイプに追加する必要があります。

String.prototype.prepend = function() {
  return 'foo ' + this
};

String.prototype.exclaim = function() {
  return this + '!'
}

var s = "".prepend().exclaim();
console.log(s);

デモ


WRTのオプションのパラメーターでは、JavaScriptで、一部のパラメーターの値を渡さずにメソッドを呼び出すことができるという事実を利用できます。これらの渡されなかったパラメーターはundefined、関数のように表示されます。null暗黙的にに変換されるため、undefined多くの場合、これらのパラメータのnullをチェックすることで処理されます

var exclaim = function(str, ch) {
  if (ch == null){
      ch = '!';
  }
  return string + ch
};

また、次のようなものもよく見られます。

var exclaim = function(str, ch) {
  ch = ch || '!';
  return string + ch
};

これは似ていますが、 6つの「偽の」値(、、、、、、および(空の文字列))のいずれかを上書きします。したがって、それを実行して、chに空の文字列を渡そうとすると、上書きされます。nullundefinedNaN0false''

于 2012-12-13T16:30:14.847 に答える
1

あなたはこれを行うことができます:

 var string = exclaim(prepend('bar'));

または、Stringオブジェクトを拡張して、.prepend()および.exclaim()構文を使用できるようにすることもできます。

  String.prototype.prepend = function() {
       return 'foo ' + this
  };

  String.prototype.exclaim = function() {
      return this + '!'
  }
于 2012-12-13T16:32:50.130 に答える
1

チェーン可能なメソッドを利用するには、そのメソッドを含むオブジェクトのインスタンスを返す必要があります。ほとんどの場合、を返しthisます。

MyStringたとえば、このクラスを参照してください

function MyString(s){
   this.str = s;
}
MyString.prototype.lower=function(){
   this.str = this.str.toLowerCase();
   return this;
}
MyString.prototype.upper=function(){
   this.str = this.str.toUpperCase();
   return this;
}
MyString.prototype.last=function(x){
   return this.str.substr(-x);
}
MyString.prototype.first=function(x){
   return this.str.substr(0,x);
}

MyString.prototype.get=function(){
   return this.str;
}


var ms = new MyString("Hello");
var s  = ms.lower().first(2); // s = 'he';
于 2012-12-13T16:30:04.770 に答える