JS:什么时候需要 Function.prototype.apply() 或 call() 来引用这个
JS: When is Function.prototype.apply() or call() necessary to refer to this
我正在学习 JS。我正在使用 Mongoose,我想将函数和参数传递给回调,但我必须改用 call()。
// Car is a model. Using Express in Node.js
express.Router().route('/')
.get((req,res,next)=>{
print(res,next,Cars.find)
})
const print = async(res,next,func,param1={})=>{
try {
const cars = await func.call(Cars,param1)
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(cars);
} catch (err)
next(err);
}
当我只是在 print(...) 中执行 func(param1) 时,它对我不起作用,returns 这个错误。
MongooseError: `Model.find()` cannot run without a model as `this`.
Make sure you are calling `MyModel.find()` where `MyModel` is a Mongoose model.
你能解释一下为什么会这样吗?我什么时候需要使用 apply()/call() 来传递这个?在 Mongoose 的这种背景下和一般情况下?
此外,我对 next() 和 next(err) 有点困惑。文档说这只是程序可以在某种意义上“跳过”错误,我可以明显地看到这一点。但它是像我们可以修改的回调函数还是内置的东西?
编辑:我在看 How to access the correct `this` inside a callback 是不是因为不知何故对象没有传递到 print()
?
在js中,this
is determined at run time和指的是运行什么的方法。如果该方法由箭头函数定义或在箭头函数中调用,则 this
向上冒泡到父函数。在这种情况下,如果我不使用 call()
,this
就会是 get()
。所以我在某种意义上是正确的,父对象 Cars
没有与 Cars.find()
.
一起传递
我正在学习 JS。我正在使用 Mongoose,我想将函数和参数传递给回调,但我必须改用 call()。
// Car is a model. Using Express in Node.js
express.Router().route('/')
.get((req,res,next)=>{
print(res,next,Cars.find)
})
const print = async(res,next,func,param1={})=>{
try {
const cars = await func.call(Cars,param1)
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(cars);
} catch (err)
next(err);
}
当我只是在 print(...) 中执行 func(param1) 时,它对我不起作用,returns 这个错误。
MongooseError: `Model.find()` cannot run without a model as `this`.
Make sure you are calling `MyModel.find()` where `MyModel` is a Mongoose model.
你能解释一下为什么会这样吗?我什么时候需要使用 apply()/call() 来传递这个?在 Mongoose 的这种背景下和一般情况下?
此外,我对 next() 和 next(err) 有点困惑。文档说这只是程序可以在某种意义上“跳过”错误,我可以明显地看到这一点。但它是像我们可以修改的回调函数还是内置的东西?
编辑:我在看 How to access the correct `this` inside a callback 是不是因为不知何故对象没有传递到 print()
?
在js中,this
is determined at run time和指的是运行什么的方法。如果该方法由箭头函数定义或在箭头函数中调用,则 this
向上冒泡到父函数。在这种情况下,如果我不使用 call()
,this
就会是 get()
。所以我在某种意义上是正确的,父对象 Cars
没有与 Cars.find()
.