2013-03-02 104 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

相關問題