2011-11-27 5 views
-1

String() 프로토 타입에 정의 된 메서드에서 변수 이름을 얻으려면 어떻게해야합니까? "s"를 포함하는 경고를 반환해야합니다JavaScript : 프로토 타입에 정의 된 메서드에서 변수 이름 가져 오기

String.prototype.foobar = function() {alert(/*something here...*/);}; 
var s="I'm just a stupid string!"; 
s.foobar(); 

...

내가 이것을 관리 할 수 ​​있습니까?

안부.

편집 :

현재이 주제의 결과를 다운로드 할 수 있습니다 https://github.com/ninov/onChange

답변

0

자바 스크립트 (사실 자바 스크립트 객체 없음) 문자열의 기본 요소 및 방법을 문자열 객체를 가지고있다. 나는 문자열 primitive가 더 효율적이고 정적으로 선언 된 문자열이 기본처럼 기본이 될 것이라고 가정합니다. 대부분의 경우 Javascript는 필요할 때 원시 객체를 객체로 자동 변환합니다. Chrome에서 코드를 실행하면 오류가 발생하며 알림이 표시됩니다. 당신이 개체의 있는지 확인하려면

, 당신은 다음과 같이 선언 할 수 있습니다

String.prototype.foobar = function() {alert("fun");}; 
var s = new String("I'm just a stupid string!"); 
s.foobar(); 

더 많은 정보를 원하시면이 항목은 here 섹션 "문자열 프리미티브와 문자열 객체 사이의 구별"을 참조하십시오.

당신이하려고하는 것이 foobar() 메소드에서 변수 이름을 얻는 것이라면 Javascript가 표준 방식으로 지원하는 것이 아닙니다.

두 가지가 실제로 묻지 않은 경우 질문을 명확히하십시오.

+0

나는이 작업을 수행 할 수 있습니다 ... 어떻게 우리가이 String 오브젝트입니다 가정 해 봅시다? (__s = new String(); __) – ninov

+0

@ninov - 귀하의 질문을 이해할 수 없습니다. 'var s = new String ("aaa");'잘 작동합니다. 너 또 무엇을 요구하고 있니? – jfriend00

0

글쎄, 이것은 실제로 작동합니다. 그 조각을 변경하면

: 그것은 당신을 위해 작동하지 않는 경우

String.prototype.foobar = function() {alert(this);}; 

다음 s.foobar();"I'm just a stupid string!"

를 알려줍니다, 어떤 엔진이 테스트하고 알려 주시기 바랍니다.

원래 변수 이름을 얻는 방법은 없습니다.

+0

이것은 OP가 요구 한 것이 아닙니다. 값이 아닌 변수 이름입니다. – Harmen

+0

경고는 'this'로 잘 작동하지만, 'this'는 원시 문자열이 아니라'String' 객체라는 점에 유의할 가치가 있습니다. – pimvdb

+0

@pimvdb하지만 String 객체의 이름은 어떻게 얻을 수 있습니까? – ninov

0

이것은 불가능합니다. 그리고 그렇게해서는 안됩니다.

당신이 정말이 메타 데이터를 알고 싶다면

, 당신은 객체 사용을 고려해야합니다

var obj = { 
    s: "I'm just a stupid string!" 
}; 

for(var x in obj){ 
    alert(x + '=' + obj[x]); // logs: s=I'm just a stupid string! 
} 

을 왜 당신은 프로그래밍 변수 이름을 알고 싶은 것?

+0

커스텀 이벤트의 종류를 만들고 싶습니다. 커스텀 이벤트는, 캐릭터 라인 changend : s.onchange (function() {alert ("s changed!");})를 체크합니다. onchange 메서드는 변수가 매 10ms마다 바뀌는 지 확인하는 간격을 시작해야합니다. ... – ninov

+0

@ninov : 이것은 이것을 달성하는 매우 의심스러운 방법입니다. 이 작업을 수행하기 위해보다 구체적인 데이터 구조를 사용하는 것이 좋습니다. 객체에 대한 변경을 조정하거나 감지하려면 데이터를 캡슐화하고 값을 검색하거나 변경하는 접근 자 메서드를 제공하십시오 (예 :'setValue() {/ * ... * /}'). 이 방법을 사용하면 변경 사항을 감지하기 위해 해킹을 수행 할 필요가 없습니다. setValue()가 호출 될 때마다 이벤트 함수를 실행하면됩니다. – bobbymcr

1

는 "나는 검사 사용자 정의 이벤트의 종류를 확인하려면 문자열 changend"불가능

. 문자열은 변경할 수 없습니다.

그리고 함수가 실제 변수 이름을 알려주기를 원한다면 그것은 불가능합니다. String 객체를 사용하면 동일한 객체를 참조하는 여러 변수가있을 수 있습니다. 어떤 이름을 사용할 지 어떻게 알 수 있습니까?

원하는 것을 수행하는 개체를 정의해야합니다. 가급적 setter 및 getter를 사용하십시오.

당신이 문자열을 참조하는 변수에 변경 알림을받을 수 있도록하기 위해, 당신이 할 수 있습니다 :

var str_obj = (function() { 

    var s = "my string"; 

    return { 
     getString: function() { 
      return s; 
     }, 
     setString: function(new_s) { 
      s = new_s; 
      alert("s changed!"); 
     } 
    }; 
})(); 

alert(str_obj.getString()); // alerts "my string" 

str_obj.setString("new string"); // alerts "s changed!" 

alert(str_obj.getString()); // alerts "new string" 
+0

예,이 방법은 * 많이 * 개선 된 방법입니다. – bobbymcr