2014-01-16 3 views
0

맞춤 문자열 메서드를 만들려고합니다.JavaScript - String 프로토 타입 함수에 문제가 있습니다.

나는 문자열의 값을 얻는 방법, 메서드가 첨부 된 함수와 함수에 전달되는 방법을 잘 모르겠습니다.

function testPrototyping(passedVar) { 
    passedVar += " reason why this is not working"; 
    return passedVar; 
} 

String.prototype.testMethod = testPrototyping; 
var myVar = "some"; 
var myVar2; 

// 1. This works but is not what I want: 
myVar2 = myVar.testMethod(myVar); 

// 2. This is what I want but doesn't work: 
myVar2 = myVar.testMethod(); 

// 3. Wondering if this should work also: 
myVar2 = testMethod(myVar); 
+0

감사 :

당신이 정말로 달성하기 위해 필요에 따라 "숨기기"실제 문자열에 다른 개체를 사용할 수 있습니다. 하지만 복잡한 실제 함수를 사용하면 함수에서 수행중인 모든 작업을 "this"로 처리 할 수있는 구문은 무엇입니까? – user3201867

+0

모두의 도움에 감사드립니다. 가늠자는 나의 눈에서 들었다. 나는 이제 "이"의 성질을 완전히 불 태웠다! (꽤 많이.) 불행히도 나는 "평판이 없다"고 투표 할 수는 없습니다. – user3201867

답변

3

당신은 여기처럼 this를 사용해야합니다 :

function testPrototyping() { 
    var text = this; 

    text = text.trim(); 

    text + " reason why this is not working"; 

    return text; 
} 

String.prototype.testMethod = testPrototyping;

"StackOverflow의".testMethod()는

프로토 방법 안의 키워드 this 생성자 인스턴스를 참조. "this"에 대한 자세한 내용은 여기를 참조하십시오. 당신은 그러나 this에 아무것도 할당 할 수 없습니다

function testPrototyping() { 
    return this + " reason why this is not working"; 
} 

: 현재 문자열을 참조하십시오

+0

링크를 가져 주셔서 감사합니다. 그러나 저에게 많은 것을 배우기를 바랍니다. – user3201867

+0

"this"내 메서드 호출에 의해 생성 된 여기에 ... "this"의 문자열 값을 함수 내부의 변수에 어떻게 할당합니까? 그런 다음 변수에 string.slice()를 수행하십시오. 그런 다음 그 결과를 "this"에 지정하십시오. 그런 다음 "this"를 메서드 호출에 반환하십시오. – user3201867

+0

필자의 예제를 업데이트했다. 변수에'this'를 할당 한 다음, 조작 한 후에 반환 할 수있다. –

2

, 당신은 this 키워드를 사용할 수 있습니다. 따라서 this += "..."이 작동하지 않습니다.

+0

이것은 지금 내 질문입니다. 모든 것을 할당하는 방법입니다. "this"에 아무것도 할당 할 수 없을 때 "this":) – user3201867

+0

왜 'this'에 할당하고 싶은가? 당신의 예제는 결과를 새로운 변수'myVar2'에 할당하고자 함을 나타냅니다 :'myVar2 = myVar.testMethod();'. 아니면'myVar'의 값을 변경하고 싶습니까? 이 변수를 이름으로 직접 참조하지 않으면이 작업을 수행 할 수 없기 때문입니다. – basilikum

+0

감사합니다. 이제 "this"는 읽기 전용입니다. – user3201867

0

testPrototyping에서 호출 할 객체 래퍼는 this을 통해 testPrototyping 안에 있습니다. String 객체 래퍼의 실제 기본 문자열은 valueOf() 방법을 통해 볼 수 있습니다 :

String.prototype.showStuff = function() { 
    console.log(this); 
    console.log(this.valueOf()); 
    console.log(this + ' proves that conversion is done automatically'); 
    console.log(typeof this, 'but it is not ok in every situation'); 
}; 
var myVar = "test"; 

myVar.showStuff(); 
/* results (Chrome 32): 
String {0: "t", 1: "e", 2: "s", 3: "t", length: 4, formatUnicorn: function, truncate: function, splitOnLast: function, contains: function…} 
test 
test proves that conversion is done automatically 
object but it is not ok in every situation 
*/ 
+0

유니콘이 답변에 대한 신뢰성을 떨어 뜨리지 않습니까? – Tibos

+0

유니 코드 용 코드가 나옵니다. – user3201867

+0

나는 [unicorns] (http : // meta.stackexchange.com/questions/207128/what-is-formatunicorn-for-strings) – Tibos

0

당신은 정확히 문자열을 자바 스크립트에서 변경할 수 있기 때문에 당신이 원하는 것을 할 수 없습니다. 즉, 새 문자열을 만들지 않고는 문자열을 변경할 수 없습니다. "이"에 대한 답을

var MyString = function(s) { 
    this.s = s; 
}; 

MyString.prototype.toString = function() { 
    return this.s; 
}; 

MyString.prototype.testMethod = function() { 
    this.s += " reason why this is working"; 
}; 

var myVar = new MyString("some"); 
alert(myVar); // "some" 
myVar.testMethod(); 
alert(myVar); // "some reason why this is working" 
+0

고맙습니다. 이제 "this"는 읽기 전용 객체/thingy이지만 그 값은 속성의 속성에 할당 될 수 있습니다. – user3201867

관련 문제