如何使用如下方法实现类?
class ExistingClass {
function func1() {} // might throw error
function func2() {} // might throw error
get try() {
// Some magic here
return this; // we need to return this to chain the calls, right?
}
}
可以像
一样调用obj.func1() //might throw an error
obj.try.func1() // execute func1 in a try/catch
基本上我想要像mochajs那样的东西:expect(..).to.not.equal()
更新:
接受的答案应该有效,以下是它的更新版本,支持async
功能
get try() {
return new Proxy(this, {
// Intercept method getter
get: function(target, name) {
if (typeof target[name] === 'function') {
if (target[name][Symbol.toStringTag] === 'AsyncFunction') {
return async function() {
try {
await target[name].apply(target, arguments);
}
catch (e) {}
}
} else {
return function() {
try {
return target[name].apply(target, arguments)
}
catch (e) {}
}
}
}
return target[name];
}
});
}
答案 0 :(得分:3)
您可以使用最新浏览器中的代理执行此操作:
Resource = [ "arn:aws:logs:*:*:*" ],
答案 1 :(得分:3)
class A {
method() {
throw 'Error';
}
get try() {
return new Proxy(this, {
// Intercept method getter
get(target, name) {
if (typeof target[name] === 'function') {
return function () {
try {
return target[name].apply(target, arguments)
} catch (e) {}
}
}
return target[name];
}
});
}
}
const a = new A;
a.try.method(); // no error
a.method(); // throws error
答案 2 :(得分:2)
对于没有支持pre-ES6
的{{1}}浏览器,如果我需要这样的功能,我就会这样做:
Proxies