2016-07-23 4 views
0

약 일주일 전에 Javascript를 배우기 시작했고 약간의 걸림돌이 생겼습니다. 제공된 링크에서 어떤 이유로 든 객체 내부에서 함수를 호출 할 수 없습니다. 내가 뭘 잘못하고 있는거야? 어떤 충고라도 잘 될 것입니다.개체 내부에서 함수를 호출하는 방법

Javascript code

+2

는 사용'this' 대신'this.word' 및 콘솔 당신에게 this' 당신이 위치에 따라'에 대해 서로 다른 값을주는 것을 볼 수 있습니다보십시오. –

+0

그 문법은 저에게 다가옵니다. 함수를 객체의 일부로 정의 할 때 이미 이름을 ... bar로 지정했습니다. 나는'test'도 거기에 있어야한다고 생각하지 않는다. 다음과 같은 것 :'bar : function() {...}' – David

+1

@David, 문법이 이상하다, 나는 동의하지만 작동한다 : [fiddle] (https://jsfiddle.net/kv6bf76n/). –

답변

2

당신은 함수를 호출하고 있지만 기능은 정의되지 않은 반환합니다. 은 testObj, this == testObj에 다른 문맥에서 호출되는 다른 의미를 가지므로 this.word은 정의되지 않습니다.

아마도 fiddle이 도움이 될 수 있습니다.

0
var testObj = { 
    bar: function(){ 
console.log(this.word) 
} 
} 

당신은 testObj.bar 를 호출 다음은이는 testObj을 의미하고 testObj는 프로퍼티 단어

var testObj = { 
    bar: function(){ 
console.log(this.word) 
}.bind(this) 
} 

사용 .bind (이) 나 .bind (창)

0

때문에이없는 경우 범위가 변경되었습니다.

JavaScript에서 범위는 코드의 현재 컨텍스트를 나타냅니다. 범위는 전역 적으로 또는 국지적으로 정의 될 수 있습니다. 자바 스크립트 범위를 이해하는 것은 방탄 코드를 작성하고 더 나은 개발자가되는 열쇠입니다. 변수/함수에 액세스 할 수있는 위치를 이해하고 코드 컨텍스트의 범위를 변경하고 더 빠르고 유지 보수가 쉬운 코드를 작성할 수있을뿐만 아니라 훨씬 빨리 디버깅 할 수 있습니다.

그래서 올바른 코드는 다음과 같습니다

솔루션에서
var that = this; 
var testObject = { bar: function() { return that.word }} 

은 "이" "창"개체입니다. 그래서 당신은이를 코딩 할 수 있습니다 :

var testObject = { bar: function() { return window.word }} 
관련 문제