我有以下代码
var loyaltyObject = (function () {
var data = null, vm, getLoyaltyUrl;
function getData() {
$.ajax({
type: 'POST',
url: getLoyaltyUrl,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (resp) {
data = resp;
},
error: function (resp) {
console.log('Error fetching offers!');
console.log(resp);
}// error(resp)
});// $.ajax()
}
...
vm = {
getData: getData,
getLoyaltyUrl: getLoyaltyUrl
};
return vm;
}());
在 document.ready 上我调用
function Init() {
window.loyaltyObject.getLoyaltyUrl = '@Url.Action("GetLoyaltyData", "Orders")';
window.loyaltyObject.getData();
}
window.loyaltyObject.getLoyaltyUrl
确实是 URL,但内部 getLoyaltyUrl
仍未定义。
我读了以下内容return a variable as a property关于设置 getter,但是我将如何执行 setter,我要设置的 this
或 value
是什么?
它在大多数浏览器上也具有可比性吗?
最佳答案
您正在将值分配给 vm.getLoyaltyUrl
,而不是私有(private)变量 getLoyaltyUrl
。该变量没有从对象 vm
继承,因此它永远不会在您的代码中定义
只需更改:
url: getLoyaltyUrl
至
url: vm.getLoyaltyUrl
简化示例
var loyaltyObject = (function () {
var data = null, vm;
function getData() {
// switched out the ajax for a simple console.log()
console.log(vm.getLoyaltyUrl)
}
vm = {
getData: getData,
getLoyaltyUrl: null
};
return vm;
}());
// following is exactly what you have
function Init() {
window.loyaltyObject.getLoyaltyUrl = '@Url.Action("GetLoyaltyData", "Orders")';
window.loyaltyObject.getData();
}
Init()
关于javascript - 为 Javascript 对象中的局部变量创建 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45023214/