글쎄, 얼마나 많은 작업을 넣고 싶은지에 따라 몇 가지 방법이 있습니다. 바인드를 사용하는 것이 가장 간단한 방법이지만 문자열을 변수로 정의해야만 그 기준은 바인딩 :
String.prototype.foo = function() { console.log(this); }
String.prototype.foo.bar = function() { console.log(this); }
var g = "hi there";
g.foo() // Yields g
g.foo.bar() // Yields String.prototype.foo()
g.foo.bar.bind(g)() // Yields g again.
String.prototype.foo.bar 반환하는 기능을 활성화하도록
가 String.prototype.foo에 게터와 세터를 생성하여 원하는 결과를 생성하는 또 다른 매우 hackish 방법이있을 수있다 foo가 참조하는 인스턴스에 바인드 된 함수. ??? 혼란스러워.
충돌의 가능성을 줄이기위한 최선의 방법은 프로토 타입 상속을 활용하고 고유 문자열의 고유 한 서브 프로토 타입을 만드는 것입니다.
function MyString(string) {
this.foo = function() { //whatever };
this.foo.bar = (function() {}).bind(this);
this.toString = function() { return string; } // because toString is not generic.
}
MyString.prototype = new String();
여기서는 String 프로토 타입의 "하위 프로토 타입"을 만듭니다. String 프로토 타입의 모든 속성을 상속하고 고유 문자열을 전혀 변경하지 않고 자체 프로토 타입을 추가합니다. BONUS : this.foo와 this.foo.bar는 둘 다 인스턴스를 나타냅니다.
var instance = new MyString("hi");
instance.foo(); // this == instance
instance.foo.bar(); // this == instance
instance.replace("i", "e"); // returns "he"
아마도이 답변은 당신이 찾고있는 답변이 아니었지만 적어도 도움이 될 것입니다.
그레이엄이 옳은 이유를 알고 싶다면 http://stackoverflow.com/a/16063711/1641941 (답변의 마지막 부분)에서 'this'값에 대해 읽을 수 있습니다. – HMR