0

私のバックグラウンドはC++で、オブジェクトの操作はJavascriptとは大きく異なるようです。C ++には、再作成しようとしている以下のペアのようなペアオブジェクトがあります。しかし、このクラスは私が意図したようには機能しません。おそらく、それはJavascriptにとって完全に間違ったアプローチです。私の最終的な目的は、key1 = val1; key2 = val2; key3=val3;の文字列を解析することです。連想配列に。したがって、それに関するヒントがあれば役立ちます。しかし、私の最初の問題は、以下のペアクラスです。どんな助けでも大歓迎です。

<html>
<head>
<title>my title</title>
<script type="text/javascript">
//Pair class - doesnt seem to work
function Pair(key, value) {
    this.key = key;
    this.value = value;
}

Pair.prototype.Key = function() { return this.key; }
Pair.prototype.Value = function() { return this.value; }


function getValueAndKey(text, splitter) {
   //Pair pair = {};
   if(text) {
     var delim = typeof splitter !== 'undefined' ? splitter : '='; 
     var delimpos = text.indexOf(delim);
     if(delimpos != -1) {
          var strkey = text.substr(0, delimpos);
          var strvalue = text.substr(delimpos+1);
          return Pair(strkey, strvalue);      
     }      
   }
   return null;
}

function doIt() {

   function Options(sourceString) {
      this.source = sourceString;

      //populate key/value pairs from source string
      var vars_array = sourceString.split(";");
      for(var i = 0; i < vars_array.length; ++i) {
         //alert("adding vars_array[" + i + "] = " + vars_array[i]);
         var pair = getValueAndKey(vars_array[i]);
         if(pair)  //pair is ALWAYS undefined :(
            alert("key=" + pair.Key() + " value=" + pair.Value());       
      }
   }

   //exercise class
   var sourceString = "cat=Cookie;legs=4;favouritefood=lamb;type=Siamese;";
   var opts = new Options(sourceString);
}
</script>
</head>

<body onload="doIt();">
some test program
</body>
</html>
4

1 に答える 1

1

これらのプロトタイプ関数はまったく必要ありません。getValueAndKey関数では、Pairだけでなく、新しいPair(strkey、strvalue)を返す必要があります。多分これはあなたの問題を解決します:

<html>
<head>
<title>my title</title>
<script type="text/javascript">
//Pair class - doesnt seem to work
function Pair(key, value) {
    this.key = key;
    this.value = value;
}

function getValueAndKey(text, splitter) {
   //Pair pair = {};
   if(text) {
     var delim = typeof splitter !== 'undefined' ? splitter : '='; 
     var delimpos = text.indexOf(delim);
     if(delimpos != -1) {
          var strkey = text.substr(0, delimpos);
          var strvalue = text.substr(delimpos+1);
          return new Pair(strkey, strvalue);      
     }      
   }
   return null;
}

function doIt() {

   function Options(sourceString) {
      this.source = sourceString;

      //populate key/value pairs from source string
      var vars_array = sourceString.split(";");
      for(var i = 0; i < vars_array.length; ++i) {
         //alert("adding vars_array[" + i + "] = " + vars_array[i]);
         var pair = getValueAndKey(vars_array[i]);
         if(pair)  //pair is ALWAYS undefined :(
            alert("key=" + pair.key + " value=" + pair.value);       
      }
   }

   //exercise class
   var sourceString = "cat=Cookie;legs=4;favouritefood=lamb;type=Siamese;";
   var opts = new Options(sourceString);
}
</script>
</head>

<body onload="doIt();">
some test program
</body>
</html>
于 2013-03-02T18:34:54.737 に答える