2012-07-27 3 views
0

다른 함수에 첨부하는 함수를 만듭니다.두 가지 다른 방식으로 함수 사용

등 :.

string("Hi").capitilize()//returns hi 

나는 두 가지 방법으로 $$ 문자열을 사용할 수 있어야합니다. 1이 그것을 함수에 연결합니다. 두 번째 기능은 다음과 같습니다.

string("Hi") 

안녕하세요. 안녕하세요. 그러나 내가지고있어 모두는 다음과 같습니다 [object Object]

나 기능에 첨부 할 첫 번째 일을 수행 할 수 있습니다 주요 코드는 다음과 같습니다

var g = function (a) { 
     this._string = typeof a == "string" ? a : a.toString(); 
     return a; 
} 
var string = function (a) { 
      return new g(a); 
} 

가 그럼 난 거기에 모든 기능에 또 다른 변수가 프로토 타입과 바인딩하십시오.

그냥 문자열 ("안녕하세요")가 있고 추가 한 경우 여전히 작동하도록 허용하면 문자열을 반환 할 수 있습니까?

+0

이 코드는 단지 예시 일 뿐이니? 왜냐하면 이미 당신이 가진 것과 비슷한 종류의'String()'함수가 있기 때문입니다. – Pointy

+0

네, 그냥 예를 들어, 내 실제 기능은 약간 다릅니다 (현명) – Shawn31313

답변

1

기본적인 문제는 함수가 반환 값의 향방을 알 수 없다는 것입니다. . 연산자가 평가 될 때까지 함수 호출이 끝났으므로 코드가 그 시점에서 아무 것도 수행 할 수 없습니다.

이제는 프로토 타입에 toString() 구현이있는 객체를 반환하면 객체가 문자열로 취급 될 때 적절하게 변환 할 수 있습니다.

var g = function (a) { 
     this._string = typeof a == "string" ? a : a.toString(); 
     return a; 
} 
g.prototype.toString = function() { 
    return this._string; 
} 
var string = function (a) { 
      return new g(a); 
} 
alert(new string("Hi")); 
+0

알아요,하지만 내가 원하는 것을 할 수있는 방법이 있어야합니다. :/ – Shawn31313

+1

@ Shawn31313 나는 Eich 씨가 너를 행복하게 만드는 모든 일들에 대해 열심히 생각하고 있었지만 그는 단지 인간이며 뭔가를 놓쳤을지도 모른다. – Pointy

+0

@ Shawn31313 당신이 원하는 것을 할 수 없다는 것을 알지만, 원하는 것을 할 수있는 방법이 있어야합니다. –

관련 문제