我试图在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;
}
同样,使用原型会产生相同的结果。
答案 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() ); }
);