javascript - js中this指向的问题
本文介绍了javascript - js中this指向的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
这样写是可以正常调用的
router.route('/account')
.get(function (req, res, next) {
User.find()
.then(users => res.json(users))
.catch(err => next(err));
});
我觉得这段代码可以简化成
router.route('/account')
.get(function (req, res, next) {
User.find()
.then(res.json)
.catch(next);
});
可是采用第二种写法的时候在express的源码中会报错
res.json = function json(obj) {
var val = obj;
// allow status / body
if (arguments.length === 2) {
// res.json(body, status) backwards compat
if (typeof arguments[1] === 'number') {
deprecate('res.json(obj, status): Use res.status(status).json(obj) instead');
this.statusCode = arguments[1];
} else {
deprecate('res.json(status, obj): Use res.status(status).json(obj) instead');
this.statusCode = arguments[0];
val = arguments[1];
}
}
// settings
var app = this.app;
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = JSON.stringify(val, replacer, spaces);
// content-type
if (!this.get('Content-Type')) {
this.set('Content-Type', 'application/json');
}
return this.send(body);
};
就是在
var app = this.app;
这一行,debug发现this值是undefined,在js里面,对象的方法,this不是应该直接指向该对象吗?为什么这里this也就是res会是undefined呢?
解决方案
这两句不是等价的。。。。
.then(users => res.json(users))
.then(res.json)
then 函数的实现大概是这样的
function then(fn)
{ //....
fn(args);
}
所以其实二种写法分别是:
var fn = function(users)
{
res.json(users)
}
fn(users);
// 。。。。。
fn = res.json;
fn(users)
这两种调用方式,在json
函数里 this 的值是不同的。
详见我的博客吧
http://zonxin.github.io/post/...
这篇关于javascript - js中this指向的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文