2013-07-12 2 views
0

자바에서 프로젝트에 getter 및 setter를 사용하려고하면 getter에서 json을 가져오고 설정자와 값을 설정하고 있습니다. 내용을 경고 할 수 있습니다. setter 함수에서 모든 것이 괜찮다는 것을 알았지 만 getter로 값을 반환하려고하면 값 대신 함수가 생겼습니다."return"값 대신 함수를 반환하는 Getter

내 코드는

function _bd() { 
    this.setJson = function(js) { 
    json = js; 
    } 
    this.getJson = function() { 
    return json; 
    } 
} 
bd = new _bd(); 
$.get("json.php", function(data) { 
    bd.setJson(data); 
},"json"); 

alert(bd.getJson); 

마지막 경고가

function() { 
    return json; 
} 

또한, 프로토 타입을 사용하면 같은 결과를 않습니다 반환합니다. 코멘트에 명시된 바와 같이

+6

는'bd.getJson' 함수입니다 ... 그래서 예상 정확히 무엇을 표시하는 것 : "진짜"게터 (IMHO, 가치가 미친 구문)에 관해서는

는 시도. 아마 당신은'bd.getJson()'을 사용하여 그것을 호출 할 필요가있다. 또한,'_bd' 함수 안에서'var json;'을 선언하지 않고'setJson' 내부에서'json = js;'를 사용하여 각 인스턴스에 로컬하게 만들지는 않을 것입니다. 그럼 다시, 그건 당신의 의도가 아닐 수도 있습니다. – Ian

+0

당신은 getter 나 setter를 전혀 사용하지 않습니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters를 읽어보십시오. – Oriol

+0

@Oriol 이것들은 동일하거나 중요하지 않습니다. – Ian

답변

1

:

당신이 기능

응답이 돌아 오기 전에, 당신은 아무것도 얻을 수 있습니다를 호출하지 않기 때문에 당신이 함수의 문자열 표시를 얻고있다

alert(bd.getJson()); 

.. 아마 정의되지 않았다.

$.getJson 
(
    success : function() { alert(bd.getJson()); } 
); 
+4

'$ .getJSON'은 비동기식이므로 어쨌든 원하는 결과를 얻지 못할 것입니다. –

+0

당신이 옳습니다. 명백한 답을 찾기 위해 그 세부 사항을 무시합니다. –

2

나는 이전 의견에 동의합니다. getter-function을 호출하여 "json"값을 검색하십시오.

아마도 여러분은 json 변수를 선언하고 싶을 것입니다 (여러분이 어떤 종류의 전역 변수를 필요로하지 않는다면).

또한 일부 오브젝트 구성 패턴을 혼합하고 일치시키는 것처럼 보입니다. closure 내부의 "private"변수 (예 : json)를 시뮬레이트하기위한 기능 패턴이지만 프로토 타입 상속이 필요하므로 construtor 함수 내에서 getter/setters를 this에 연결할 수 있습니다. 하나에 충실 할 수 있습니까?

예 : 폐쇄 형 비공개.

function _bd() { 
    var json; 
    var that = {}; 
    that.setJson = function(js) { 
    json = js; 
    } 
    that.getJson = function() { 
    return json; 
    } 
    return that; 
} 
var bd = _bd(); 
$.get("json.php", function(data) { 
    bd.setJson(data); 
    alert(bd.getJson()); 
},"json"); 

예 : OO 스타일, 생성자 함수 포함.

function BD(){ 
    this._json = null; 
} 
BD.prototype = { 
    getJson: function(){ 
    return this._json; 
    }, 
    setJson: function(json){ 
    this._json = json; 
    } 
}; 

var bd = new BD(); 
$.get("json.php", function(data) { 
    bd.setJson(data); 
    alert(bd.getJson()); 
},"json"); 

하이브리드 스타일을 사용하는 데는 충분한 이유가있을 수 있지만 한 가지 방법이나 다른 방법을 고수하면 도움이됩니다.

function BD(){ 
    this._json = null; 
} 
Object.defineProperty(BD.prototype,"json",{ 
    get: function(){ 
     return this._json; 
    }, 
    set: function(json){ 
     this._json = json; 
    } 
}); 

var bd = new BD(); 
bd.json = {a: "test"}; 
console.log(bd); 
관련 문제