5

私は本からこの演習を取得しました(解決策なし):

String() コンストラクターが存在しなかったと想像してください。String() とできるだけ同じように動作するコンストラクター関数 MyString() を作成します。組み込みの文字列メソッドまたはプロパティを使用することは許可されておらず、String() が存在しないことに注意してください。このコードを使用して、コンストラクターをテストできます。

>>> var s = new MyString('hello');
>>> s.length;

それでも、解決策はありますが、要件に従っているかどうかはわかりません(つまり、「組み込みの文字列メソッドまたはプロパティを使用することは許可されていません」)。そして、ここに私の解決策があります:

function MyString(string) {
    this.length = 0;
    for(var i in string) { 
        this.length++;      
    }
}
var x = new MyString("Hello");
x.length;

よくわからないのは for-in ループです。そのループ内の文字列変数のデータ型を教えてください。そのような配列ですか、それとも文字列として使用していますか (つまり、要件を破っています)? どうもありがとう!

4

1 に答える 1

0

簡単に言うとstringforループ内ののデータ型は確かに文字列です。ただし、長さを計算するためにネイティブのStringメソッドを使用していないため、(とにかくlengthプロパティの)要件を満たしていると確信しています。

とは言うものの、私は@cwolvesに同意しました。これは、「使用が許可されていない」という要件に違反せずに、コンストラクターに別のデータ型を渡すことが非常に困難になるという点です(JavaScriptのデータ型が非常に少ない場合)。組み込みの文字列メソッドまたはプロパティ」。

初期化ループに関しては、要件に違反していないことを称賛しますが、機能しません。取得するのは、次のような配列です。

[
    "0",
    "1",
    "2",
    "3",
    "4"
]

非常に長い投稿を避けるために、部分的な実装の迅速で汚いバージョンのフィドルがあります:http: //jsfiddle.net/CtF2Q/

フィドルへの警告:

次のメソッドは実装されていません。

  • charCodeAt
  • fromCharCode
  • 交換
  • 探す
  • スプリット

次のメソッドは部分的にしか実装されていません。

  • の指標
  • lastIndexOf
  • マッチ
  • toLowerCase
  • toUpperCase
于 2012-10-18T12:21:33.027 に答える