Getter返回函数而不是“return”值

时间:2013-07-12 17:55:25

标签: javascript json

我试图在javascript中使用getter和setter进行项目,我从jquery获取json并使用setter设置值,我可以在setter函数中提醒内容,所以我知道一切没关系,但是当我尝试用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;
}

同样,使用原型会产生相同的结果。

2 个答案:

答案 0 :(得分:2)

我同意之前的评论。调用getter-function来检索“json”值。

可能你也想要声明json变量(除非你需要全局某些变量)。

此外,您似乎混合和匹配一些对象构造模式。函数模式,用于模拟闭包内的“私有”变量(如json),但您还需要原型继承,因此您可以将getter / setter附加到construtor函数内的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");

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

答案 1 :(得分:1)

如评论中所述:

alert( bd.getJson() );

您正在获取该函数的字符串显示,因为您没有调用该函数

在回复之前,你什么也得不到......可能是未定义的。

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