我创建一个对象并为其设置一些函数,我的问题是,我可以在附加到它的函数中更改该对象的属性值吗?
这是我的代码:
var service = new Object();
service.login = login;
service.isUserAuthenticated = false;
function login(userName, password, successCallback) {
var requestBody = 'grant_type=password&username=' + userName + '&password=' + password;
$http.post($rootScope.baseUrl + 'token', requestBody)
.then(
function (response) {
isUserAuthenticated = true;
successCallback(response);
},
function (response) {
console.log(response);
})
}
我想在用户登录系统时更改 isUserAuthenticated 的值,这可以在这个登录函数中实现吗?
如有任何帮助,我们将不胜感激。
最佳答案
当您将login
绑定(bind)到service
时,this
(如果在login
的正文中使用> 函数)将在login
执行期间引用service
对象。但是,在 login
函数内定义并作为参数传递给 .then()
的后续回调中,this
将不再引用该服务一旦执行回调,您就需要将服务绑定(bind)为 (this
) 上下文,或者将其存储在闭包中。因此,您可以重写您的login
函数:
// binding 'this' to the service
function login(userName, password, successCallback) {
var requestBody = 'grant_type=password&username=' + userName + '&password=' + password;
$http.post($rootScope.baseUrl + 'token', requestBody)
.then(function (response) {
this.isUserAuthenticated = true;
successCallback(response);
}.bind(this),
function (response) {
console.log(response);
});
}
否则:
// storing the service as a closure
function login(userName, password, successCallback) {
var requestBody = 'grant_type=password&username=' + userName + '&password=' + password;
var self = this;
$http.post($rootScope.baseUrl + 'token', requestBody)
.then(
function (response) {
self.isUserAuthenticated = true;
successCallback(response);
},
function (response) {
console.log(response);
});
}
就您而言,后者并不是绝对必要的,因为您已经将服务存储为在 login
函数外部声明的变量,并且可以简单地分配 true
到service.isAuthenticated
。
此外,如果您使用 ES6,函数文字(即 function() {//... }
)将作为回调传递给 .then()
可以使用粗箭头表示法编写,上下文绑定(bind)将自动执行:
function login(userName, password, successCallback) {
var requestBody = 'grant_type=password&username=' + userName + '&password=' + password;
$http.post($rootScope.baseUrl + 'token', requestBody)
.then((response) => {
this.isUserAuthenticated = true;
successCallback(response);
},
(response) => {
console.log(response);
});
}
关于javascript - 更改自己对象中函数内对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354508/