【发布时间】:2015-04-24 13:33:33
【问题描述】:
我正在尝试从模块中获取私有属性,但我总是得到它的初始值,而不是最新的。
当提交表单并调用 onSuccess 时,我设置了 partnerId = 10。
之后,我有一个点击事件,获取合作伙伴的Id,并得到-1
search.js
var SearchForm = (function ($) {
"use strict";
// Private variables
// Private functions
var onSuccess = function () {
PartnerDetail.setPartnerId(10);
};
// Public functions
return {
onSuccess: onSuccess,
};
})(jQuery);
detail.js
var PartnerDetail = (function ($) {
"use strict";
var _partnerId = -1;
var getPartnerId = function () {
return _partnerId;
};
var setPartnerId = function (id) {
_partnerId = id;
}
// Public functions
return {
getPartnerId: getPartnerId,
setPartnerId: setPartnerId
};
})(jQuery);
search.internal.js
var SearchAll = (function ($) {
"use strict";
// Private variables
// Private functions
var init = function () {
$("#partner").on("click", function () {
var p = PartnerDetail.getPartnerId();
console.log(p); ==> -1
}
};
// Public functions
return {
init: init
};
})(jQuery);
(主页)
// Load when ready
$(document).ready(function () {
SearchAll.init();
});
【问题讨论】:
-
看来你必须使用闭包函数
-
无法重现;在小提琴中工作:jsfiddle.net/or315y60
-
@GiacomoPaita 嗨,这是什么意思?
-
缓存值,像这样:javascriptissexy.com/understand-javascript-closures-with-ease 或者,更好的是,这里:lucybain.com/blog/2014/closures 但是,您的代码似乎已经使用了它,并且可以正常工作。
标签: jquery javascript