我想用一些额外的方法来增强对象,例如将first()
或second()
方法添加到数组但是使用命名空间,以便以[1, 2].item.second()
的方式调用它,而不是[1, 2].second()
。我得到的代码如下,但我得到undefined
。
Array.prototype.item = {
first: function () {
return this[0];
},
second: function () {
return this[1];
}
};
[1, 2].item.second()
// undefined
// I don't want to use [1, 2].second()
答案 0 :(得分:2)
this
和first()
函数中的second()
引用数组的item
属性,而不是数组本身,这就是为什么你得undefined
item
1}}。
最简单的方法是通过将Array.prototype.item = function() {
var _this = this;
return {
first: function() {
return _this[0];
},
second: function() {
return _this[1];
}
};
};
转换为方法来捕获正确的上下文,如下所示:
[1, 2].item().first(); // 1
[1, 2].item().second(); // 2
然后:
Object.defineProperty(Array.prototype, 'item', {
get: function() {
var _this = this;
return {
first: function() {
return _this[0];
},
second: function() {
return _this[1];
}
};
}
});
根据您的更新,如果您坚持使用原始属性语法,则可以尝试以下操作:
[1, 2].item.first(); // 1
[1, 2].item.second(); // 2
然后:
function isAuthenticated(req, res, next) {
var getToken = req.cookies.token;
var getUrl = req.originalUrl;
console.log(getToken)
if(getToken == undefined) {
res.redirect('/login')
next()
} else {
console.log('success')
next()
}
next() }
router.get('/login', isAuthenticated, auth.login);
router.get('/logout', isAuthenticated, auth.logout);
router.post('/logging', auth.prosesLogin);
请参阅MDN