2013-03-02 106 views
0

我的背景是C++,它似乎与对象一起工作与Javascript非常不同。 C++有一个像Pair这样的Pair对象,我试图重新创建它。但是这个班不按我的意图工作。也许这完全是Javascript的错误方法。我的最终目标是解析一串key1 = val1; key2 = val2; key3 = val3;成关联数组。所以任何提示都会有所帮助。但我的第一个问题是下面的Pair类。任何帮助将非常感激。为什么这个Pair类不能像我期望的那样工作

<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> 

回答

1

根本不需要这些原型函数,而在getValueAndKey函数中,您必须返回新的Pair(strkey,strvalue)而不是Pair。 也许这就解决了你的问题:

<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> 
+0

你能解释一下你做了什么来解决这个问题吗? – JJJ 2013-03-02 18:36:51

+1

是的,我在编辑中做过。 – 2013-03-02 18:39:54

+0

Javascript令人困惑,因为你可以创建一个没有新的对象。谢谢。刚刚注意到您对Pair成员的编辑,再次感谢。 – 2013-03-02 18:42:12

相关问题