2016-06-24 4 views
0

gettersetter이 필요한 몇 가지 변수가 있습니다. 각각에 대해 새 클래스를 만드는 대신 하나의 클래스를 만들고 변수에 대한 해당 클래스의 인스턴스를 만들고 싶습니다.GetterSetter 클래스가 작동하지 않습니다.

다음은 시도한 코드입니다. 그러나 기본적으로 test이 (가) undefined이라는 오류가 발생합니다. 무엇이 잘못 되었습니까? 어떻게 해결할 수 있습니까? 또한, 이렇게하는 것이 일반적입니까? 올바른 접근 방법을 취하고 있습니까?

function GetterSetter(/** Any Value */ value, /** Function */ getter, /** Function */ setter) { 
 
    this.set = function(val) { 
 
    this.value = val; 
 
    typeof setter === 'function' && setter(); 
 
    console.log('actual setter'); 
 
    }; 
 
    this.get = function() { 
 
    typeof getter === 'function' && getter(); 
 
    console.log('actual getter'); 
 
    return this.value; 
 
    }; 
 
    (typeof value !== 'undefined' && value !== null) && this.set(value); 
 
} 
 

 
var test = GetterSetter('hello', function() { 
 
    console.log('custom getter'); 
 
}, function() { 
 
    console.log('custom setter'); 
 
});

이 실제 오류 메시지입니다 :

Uncaught TypeError: Cannot read property 'get' of undefined

답변

3
var test = GetterSetter(...); 
     ^

당신은 new 여기이 누락 :

var test = new GetterSetter(...); 

티를 s는 에있는 this이 새로운 인스턴스가 아닌 window 개체이고, testGetterSetter의 실제 반환 값입니다 (따라서 아무 것도 반환하지 않으므로 undefined).

+0

빠른 답변 감사드립니다. (나는 그것을 어떻게 보지 못했을 것인가? lol) 좋은 습관인가? 그것을하는 것이 일반적입니까? – Jessica

+0

JS good practice에서 "new' 키워드를 사용하고 있습니까?" 짧은 대답 : 아무 문제가 없으며 일반적인 패러다임입니다. 긴 대답 : 그것은 또 다른 질문입니다. 여기에 몇 가지 대답이 있습니다 : http://stackoverflow.com/questions/383402/is-javascripts-new-keyword-considered-harmful – Assimilater

+0

@Assimilater 나는 GetterSetter 클래스를 잘 만들었습니다. 연습? – Jessica

관련 문제