0

我尝试在 javascript 中为项目使用 getter 和 setter,我从 jquery get 获取 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;
}

此外,使用原型也会产生相同的结果。

4

2 回答 2

2

我同意前面的评论。调用 getter 函数以检索“json”值。

可能您也想声明 json 变量(除非您在某种全局范围内需要它)。

此外,您似乎混合和匹配了一些对象构造模式。功能模式,用于模拟闭包内的“私有”变量(如json),但您还需要原型继承,因此您可以将 getter/setter 附加到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);
于 2013-07-13T10:50:27.653 回答
1

如评论中所述:

alert( bd.getJson() );

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

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

$.getJson
(
   success : function() { alert( bd.getJson() ); }
);
于 2013-07-12T18:07:23.990 回答