Я согласен с предыдущими комментариями. Вызовите функцию 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);
'bd.getJson' функция ... поэтому он показывает именно то, что ожидалось. Возможно, вам нужно вызвать его, используя 'bd.getJson()'. Кроме того, вы, вероятно, не хотите использовать 'json = js;' (внутри 'setJson') без объявления' var json; 'внутри вашей' _bd' функции, чтобы сделать его локальным для каждого экземпляра. Опять же, это может быть не ваше намерение – Ian
Вы не используете геттеры и сеттеры вообще. Прочтите https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters. – Oriol
@Oriol Эти работы одинаковы, это не важно/актуально – Ian