我有以下代码
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;
}());
on document.ready我打电话
function Init() {
window.loyaltyObject.getLoyaltyUrl = '@Url.Action("GetLoyaltyData", "Orders")';
window.loyaltyObject.getData();
}
window.loyaltyObject.getLoyaltyUrl
确实是网址,但内部getLoyaltyUrl
仍未定义。
我阅读了以下return a variable as a property关于设置getter的内容,但是如何执行setter,我将设置的this
或value
是什么?
在大多数浏览器上也可以比较吗?
答案 0 :(得分:2)
您要将值vm.getLoyaltyUrl
分配给私有变量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()
答案 1 :(得分:1)
但我如何执行制定者,我要设置的
this
或value
是什么?
您只需分配给变量getLoyaltyUrl
:
vm = {
// ...
set getLoyaltyUrl(value) {
getLoyaltyUrl = value;
},
}
在您的情况下,您不会使用this
。 value
是分配给该属性的值。
答案 2 :(得分:0)
我认为这里不需要定制房产。但您可以查看Object.defineProperty或它的Reflect对应物来动态更改对象属性。
Object.defineProperty(obj, 'getLoyaltyUrl', {
set: (value) => {
// do something here, better be worth it.
},
get: () => {}
})