2011-06-15 3 views
1
function test(){ 
    String.prototype.to_selector=function(a){return "#"+a;} 
    return "asd".to_selector(); 
} 

"asd".to_selector();이 기능 밖에서 작동하지 않길 원합니다. 그것을하는 방법? 아니면 필요한가요?함수 클로저 내에서만 객체의 프로토 타입을 적용 할 수 있습니까?

+0

왜 그렇게하고 싶습니까? 그냥 "to_selector"함수를 정상적으로 정의하고 그것을 호출하십시오. –

+0

저는 루비 (Ruby) 사용자이고, .to_selector()를 사용하는 많은 함수에서 그것을 재사용하기위한 실제 객체 방법을 원합니다. 잘못해서 문제를 진술 해 주셔서 죄송합니다. @Sergi가이 작업을 실제로 수행해야한다고 생각했습니다. – wizztjh

답변

2
function test(){ 
    String.prototype.to_selector=function(a){return "#"+a;} 
    var o = "asd".to_selector(); 
    delete String.prototype.to_selector; 
    return o; 
} 
2

아니요, 불가능합니다. 예를 들어 실제로 유용하지는 않습니다. 왜는 사용

function test(){ 
    var to_selector = function(a){return "#"+a;}; 
    return to_selector("asd"); 
} 

네이티브 오브젝트 (String 여기)가 해당 개체에 대한 모든 후속 호출에 대해 할당 된 것에 대한 프로토 타입 방법을 지정합니다.

당신 진짜 String 객체에 직접하는 방법을 지정할 수 있지만 다시 난 정말이에 대한 모든 사용 사례를 볼 수 없습니다 :이 것 때문에,

var test = function(a){ 
    var str = new String(a); 
    str.to_selector = function(){return "#"+this;} 
    return str.to_selector(); 
} 
alert(test('asd')); //=> '#asd' 
alert('bla'.to_selector()); //=> error 
+0

다른 오브젝트를 기반으로 오브젝트를 만들 때마다 원래 오브젝트 프로토 타입이 새 오브젝트에 상속됩니다. 이 [JavaScript 프로토 타입 이해에 대한 도움말] (http://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/)이 도움이 될 수 있습니다. –

+0

@Useless 코드 :이 주석이 질문 자체를 다루어서는 안됩니까? 나는 자바 스크립트 프로토 타입을 합리적인 정도로 이해한다고 생각한다. – KooiInc

+0

@Kooilinc 어쩌면 그렇게; 나는 게시 할 답변과 매우 흡사하기 때문에 귀하의 게시물에있는 정보에 귀하의 정보를 추가하기 만하면됩니다. –

2

그것은 String 프로토 타입을 수정하여 수 없습니다를 이 함수가 실행 된 후에 작성한 String의 모든 인스턴스를 수정하십시오.

특정 기능 범위 내에서만 작동하는 기본 개체에 대한 메서드가 필요하지 않습니다. 유스 케이스 란 무엇입니까? 항상 String 객체에 정적 메서드를 추가하거나 String 프로토 타입에 인스턴스 메서드 (좋은 방법은 아니므로 마음에 듭니다)를 추가하고 test 내부에서만 사용하십시오. 다시

var string2 = function(str) { 
    this.str = str; 
}; 

string2.prototype = { 
    to_selector: function() { 
     return '#' + this.str; 
    }, 
    toString: function() { 
     return this.str; 
    } 
}; 

function test(){ 
    asd = new string2("asd"); 
    return asd.to_selector(); 
} 

하지만, 내가 어떻게 볼 수 없습니다 :

당신은 또한 당신이 문자열 선언에서 직접 to_selector 전화의 우아함을 잃고 있지만, 당신은 그 목적을 위해 사용할 수있는 새로운 개체를 만들 수 있습니다 전혀 편리 할 것입니다.

+0

와우 .... 나는 틀린 질문을한다. 그러나 당신은 나에게 내가 필요한 대답을 줬다! 굉장 .... 감사합니다 – wizztjh

+1

+1 "나는 이것이 어떻게 편리 할지를 볼 수 없다"언어로 프로그램하고 js에서 Ruby/Java/C/etc를 쓰는 것을 멈추십시오. – Raynos

관련 문제