2013-03-02 2 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 기능에 새로운 쌍 (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> 
+0

문제를 해결하기 위해 수행 한 조치에 대해 설명해 주시겠습니까? – JJJ

+1

예 편집에 사용했습니다. –

+0

새 항목없이 개체를 만들 수 있기 때문에 Javascript가 혼란 스럽습니다. 감사. 그리고 Pair 멤버들에게 편집을 보았습니다. 다시 한번 감사드립니다. –

관련 문제