2013-07-12 2 views
0

Я пытаюсь использовать геттеры и сеттеры для проекта в javascript, я получаю json из jquery get и im, устанавливая значение с помощью setter, я могу предупредить контент в функции setter, поэтому я знаю, что все в порядке, но когда я пытаюсь вернуть значение с помощью getter, я получил функцию вместо значения.Getter возвращает функцию вместо значения «return»

Мой код

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' функция ... поэтому он показывает именно то, что ожидалось. Возможно, вам нужно вызвать его, используя 'bd.getJson()'. Кроме того, вы, вероятно, не хотите использовать 'json = js;' (внутри 'setJson') без объявления' var json; 'внутри вашей' _bd' функции, чтобы сделать его локальным для каждого экземпляра. Опять же, это может быть не ваше намерение – Ian

+0

Вы не используете геттеры и сеттеры вообще. Прочтите 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 для получения значения «json».

Возможно, вы хотите также объявить переменную json (если вам это не нужно в глобальном масштабе).

Кроме того, вы, кажется, смешиваете и сопоставляете некоторые шаблоны построения объектов. Функциональный шаблон для имитации «частных» варов внутри укупорочного средства (например, json), но вам также требуется прототипное наследование, поэтому вы можете присоединить геттер/сеттеры к this внутри функции construtor. Можно ли придерживаться одного?

E. g .: улавливание рядовых в закрытии.

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"); 

E.g. 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); 
Смежные вопросы