我正在开发一个使用Prototypical Inheritance的JavaScript项目.我决定使用它的方式如下:
var MySuperClass = function (param) {
this.prop = param;
};
MySuperClass.prototype.myFunc = function () {
console.log(this.prop);
};
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = new MySuperClass();
MySubClass.prototype.constructor = MySubClass;
var obj = new MySubClass('value');
obj.myFunc();
Run Code Online (Sandbox Code Playgroud)
重点是继承.
这个问题是,如果我在每个类(超级和子类)的构造函数中放置一个console.log,那么超级类被调用两次,一次被传递到MySubClass.prototype = new MySuperClass();没有任何参数的子类,一次带参数当它是子类的构造函数中的"构造函数被盗"时.
如果我然后尝试保存这些参数(这意味着我必须添加逻辑来处理空参数),这可能会导致错误.
现在,如果我这样做:
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = MySuperClass;
MySubClass.prototype.constructor = MySubClass;
Run Code Online (Sandbox Code Playgroud)
一切似乎都正常,但我以前从未见过有人这样做过(在我的Googl'ing中).
任何人都可以向我解释第二个是否以及如何不正确(它似乎与Crockford继承功能相似)以及如果它取悦,如何修复第一个不发射两次?
我尝试遵循有关在 AWS 上为我的 Lambda 设置 SQS 死信队列的文档,但我似乎无法将错误传递给它。
我有一个 Lambdaeu-west-2
exports.handler = async (event) => {
if (event.desire === 'error') {
throw new Error('dutifully throw an error');
}
const response = {
statusCode: 200,
body: JSON.stringify('Complete the lambda!'),
};
return response;
};
Run Code Online (Sandbox Code Playgroud)
将异步调用设置为我的 sqs 队列test-dlq
我在角色中添加了以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "sqs:*",
"Resource": "arn:aws:sqs:eu-west-2:123456789:test-dlq"
}
]
}
Run Code Online (Sandbox Code Playgroud)
(我之前已经这样设置过,"Action": "sqs:SendMessage"但为了简洁起见,我让它更加宽松)
我已经设置了 SQS 队列来接收消息:
我的测试用例有效负载是:
{
"desire": "error"
}
Run Code Online (Sandbox Code Playgroud)
这会导致 lambda 出错并将错误添加到 CloudWatch …