为Javascript对象中的局部变量创建setter
我有以下代码为Javascript对象中的局部变量创建setter,javascript,Javascript,我有以下代码 var loyaltyObject = (function () { var data = null, vm, getLoyaltyUrl; function getData() { $.ajax({ type: 'POST', url: getLoyaltyUrl, contentType: 'application/json; charset=utf-8', dataType: 'json', suc
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;
}());
准备好我打电话了吗
function Init() {
window.loyaltyObject.getLoyaltyUrl = '@Url.Action("GetLoyaltyData", "Orders")';
window.loyaltyObject.getData();
}
window.loyaltyObject.getLoyaltyUrl
确实是url,但是内部的getLoyaltyUrl
仍然没有定义
我阅读了下面关于设置getter的内容,但是我将如何执行setter,我将设置的this
或值是什么
它在大多数浏览器上也可以比较吗
但是我如何执行setter,我要设置的这个
或值是什么
您只需分配给变量getLoyaltyUrl
:
vm = {
// ...
set getLoyaltyUrl(value) {
getLoyaltyUrl = value;
},
}
在您的情况下,您不会使用此
<代码>值
是指定给属性的值
但是我如何执行setter,我要设置的这个
或值是什么
您只需分配给变量getLoyaltyUrl
:
vm = {
// ...
set getLoyaltyUrl(value) {
getLoyaltyUrl = value;
},
}
在您的情况下,您不会使用此
value
是分配给属性的值。您将值分配给的是vm.getLoyaltyUrl
而不是私有变量getLoyaltyUrl
。该变量没有从对象vm
继承,因此它永远不会在代码中定义
只要改变一下:
url: getLoyaltyUrl
到
简化示例
var-loyaltyObject=(函数(){
var数据=null,vm;
函数getData(){
//为一个简单的控制台切换了ajax。log()
console.log(vm.getLoyaltyUrl)
}
vm={
getData:getData,
getLoyaltyUrl:null
};
返回虚拟机;
}());
//以下就是你所拥有的
函数Init(){
window.loyaltyObject.getLoyaltyUrl='@Url.Action(“GetLoyaltyData”,“Orders”);
window.loyaltyObject.getData();
}
Init()。该变量没有从对象vm
继承,因此它永远不会在代码中定义
只要改变一下:
url: getLoyaltyUrl
到
简化示例
var-loyaltyObject=(函数(){
var数据=null,vm;
函数getData(){
//为一个简单的控制台切换了ajax。log()
console.log(vm.getLoyaltyUrl)
}
vm={
getData:getData,
getLoyaltyUrl:null
};
返回虚拟机;
}());
//以下就是你所拥有的
函数Init(){
window.loyaltyObject.getLoyaltyUrl='@Url.Action(“GetLoyaltyData”,“Orders”);
window.loyaltyObject.getData();
}
Init()
我认为这里不需要自定义属性。但您可以查看Object.defineProperty或它的对应项来动态更改对象属性
Object.defineProperty(obj, 'getLoyaltyUrl', {
set: (value) => {
// do something here, better be worth it.
},
get: () => {}
})
我认为这里不需要定制房产。但您可以查看Object.defineProperty或它的对应项来动态更改对象属性
Object.defineProperty(obj, 'getLoyaltyUrl', {
set: (value) => {
// do something here, better be worth it.
},
get: () => {}
})
FWIW,我认为人们期望以get…
开头的属性实际上是函数。不将URL作为getData
的参数的原因是什么?vm
将getLoyaltyUrl作为(公共)属性,不需要设置器。或者您想将其设置为loyaltyObject
?只需在方法中使用this.getLoyaltyUrl
属性并删除局部变量。将URL设置为参数对我来说似乎更自然。它更有表现力。“我想从此URL加载数据”vs“将此属性设置为URL,然后获取数据”。FWIW,我认为以get…
开头的属性实际上是函数。为什么不将URL作为getData
的参数?vm
将getLoyaltyUrl作为(公共)属性,不需要二传手。或者您想将其设置为loyaltyObject
?只需在方法中使用this.getLoyaltyUrl
属性并删除局部变量。将URL设置为参数对我来说似乎更自然。它更有表现力。“我想从此URL加载数据”vs“将此属性设置为URL,然后获取数据”。