2014-08-28 1 views
1

개체 자체에서 값을 업데이트하려고합니다. 나는 다음과 같은 코드를 가지고있다 :"this"를 사용하여 개체 내 값 업데이트

var stepData = { 
     0: { 
      ref: "Home", 
      values: { 

      }, 
      init: function(){ 
       stepData[1].ref = 'new value'; 
       alert(stepData[1].ref); 
       return; 
      }, 
      save: function(){ 

      } 
     }, 
     1: { 
      ref: "one" 
     } 
    } 

    $("#run").click(function(){ 
     stepData[0].init(); 
    }); 

어느 것이 잘 동작하는지. 그러나, 나는

this[1].ref = 'new value'; 
alert(this[1].ref); 

왜와

stepData[1].ref = 'new value'; 
alert(stepData[1].ref); 

를 대체 할 수 있습니까?

수정 : 죄송합니다. 원본 코드는 실수입니다. 이제 해결되었습니다.

+1

'this'는 객체 생성자 함수처럼 작동합니다. 또한 jQuery 이벤트 핸들러에서 'this'는 항상 선택된 DOM 요소를 참조합니다. – SeinopSys

+0

'console.log (this);' – epascarello

+3

'stepData [0]을 호출하면 작동하지 않습니다.init()'이면'this'는'stepData'가 아니라'stepData [0]'을 참조합니다. – JLRishe

답변

1

this은 주로 정의 된 곳이 아닌이라는 기능이 인 방식으로 설정됩니다. 코드 :

$("#run").click(function(){ 
    stepData[0].init(); 
}); 

은 ... stepData[0]this 세트 init 호출합니다.

당신 Function#call를 사용하여, 당신이 좋아하는 경우 stepDatathis 세트를 호출 할 수 있습니다

그래서 방법 나는 그것을 : 질문에 대한 내 댓글에서

$("#run").click(function(){ 
    stepData[0].init.call(stepData); 
}); 

을 그러면 괜찮습니까?

는 한 stepData는 싱글 톤으로, 그 기능에 this를 사용하는 특별한 필요가 없습니다. (내 블로그)

상세 정보 this :

+1

좋아, 고마워. – Inigo

0

당신이 stepData[0].init()를 호출하는 경우 그것은 때문에 작동하지 않습니다, 다음 this는, stepData[0]을 의미하지 stepData.

var stepData = (function(){ 
    var mySelf = { 
     0: { 
      ref: "Home", 
      values: { 
      }, 
      init: function(){ 
       mySelf[1].ref = 'new value'; 
       alert(mySelf[1].ref); 
       return; 
      }, 
      save: function(){ 

      } 
     }, 
     1: { 
      ref: "one" 
     } 
    }; 

    return mySelf; 
})(); 

다음은 당신이 지금 가지고있는 코드를 깰 것 : 상황을 개선하기 위해

한 가지 방법은 객체를 생성하는 즉시 호출 기능을 사용하는 것입니다

var newVariable = stepData; 
stepData = null; 
newVariable[0].init(); 

을하지만 것 위의 접근 방식을 깨지 마십시오.

관련 문제