2015-01-21 2 views
-2
function StringBuffer(initialStr) { 
    this.append(initialStr); 
} 
StringBuffer.prototype = { 
    items: [], 
    append: function(str) { 
     this.items[this.items.length] = str instanceof StringBuffer ? str.toString() : str; 
     return this; 
    }, 
    toString: function() { 
     return this.items.join(""); 
    } 
}; 
alert(new StringBuffer("foo").append(new StringBuffer("bar")).toString()); 

"foobar"에 대해 어떻게 알 수 있습니까?자바 스크립트 혼란

function StringBuffer(initialStr) { 
    this.items = []; 
    this.append(initialStr); 
} 

및 프로토 타입에서 제거 :

+1

왜 문자열 버퍼를 만드십니까? – zero298

+0

추가 기능에서 this.items.push를 사용하십시오. –

답변

2

당신은 인스턴스 items 속성이 아닌 공유가 필요합니다.

그렇지 않으면 StringBuffer의 모든 인스턴스가 동일한 배열을 변형합니다.

1

items을 모든 StringBuffer 인스턴스가 공유하는 배열 대신 인스턴스 변수로 지정하십시오.

function StringBuffer(initialStr) { 
    this.items = []; 
    this.append(initialStr); 
} 
StringBuffer.prototype = { 
    append: function(str) { 
     this.items[this.items.length] = str instanceof StringBuffer ? str.toString() : str; 
     return this; 
    }, 
    toString: function() { 
     return this.items.join(""); 
    } 
};