2013-02-16 1 views
0

자바에서 this의 값을 어떻게 설정합니까? 예를 들어
:Javascript -이 값을 설정

var obj = { 
    a: 'b', 
    c: "d", 
    e: function() { 
     this = { 
      one: 1, 
      two: 2 
     }; 
    } 
}; 

이도 가능합니까?

+1

'{one : 1, two : 2} '객체를 함수 안에 넣는다면 왜 이것을'this '에 할당해야합니까? 실제로 성취하려는 것은 무엇입니까? [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)를 참조하십시오. –

답변

1

당신이 묻는 것처럼 자바 스크립트에서 this의 값을 명시 적으로 할당 할 수 없습니다.

함수가 실행되기 시작하면 해당 함수 안에 this의 값은 변경되지 않습니다. 그러나 포함 된 함수의 값은 this이 될 수 있습니다.

당신은 너무 아마도 만약 당신이 원하는 이와 같은 this에 속성을 할당 할 수

:

this.one = 1; 
this.two = 2; 

대신 this이 함수의 호출자와 무엇을 결정하는 방법 호출되는 함수입니다 의해 제어됩니다 어떤 this이 함수 내부로 설정됩니다. 예를 들어

obj.e() 

obje()this의 내부 값을 설정한다. 또한 this의 가치를 일으킬 .apply().call()을 사용할 수 있습니다


가 포함 된 객체가 아닌 다른 값으로 설정합니다. 당신이이 코드 무엇을 요구 할 수있는 예를 들어

:

var test = {one:1, two:2}; 
var obj = { a:'b', c:"d", e:function(){ 
    // this will be set to the test object in here when called as below 
}}; 

obj.e.call(test); 

e()이 특정 통화의 내부 this의 값의 원인이됩니다 귀하의 요청 객체로 설정합니다.

0
var obj = { a:'b', c:"d", e:function(){ 
    // Here, this.one === 1 and this.two === 2 
}.bind({ one: 1, two : 2})}; 
0

는 '이'기능 체내 설정할 수없는 예약어이다.

함수의 apply 또는 call 메서드를 사용하여 this의 특정 값을 갖는 함수를 호출 할 수 있습니다. obj.e.call({one: 1, two: 2}). 이 두 가지 기능 방법에 대한 MDN 기사를 찾아보십시오.

또한 ECMAScript 5의 bind 메서드를 사용하면 함수가 호출 될 때마다 this 값을 영구히 설정할 수 있습니다. ECMAScript 5 메서드는 이전 브라우저에서는 작동하지 않지만 이전 브라우저에 지원 기능을 추가 할 수있는 polyfill이 있습니다.