1

我正在使用一个 API,该 API 在用户提交数据之前返回用于验证表单的模式。

例如,该模式有一个User具有名为 的属性的类email。如果有错误,则User.validators.getEmailErrors()返回Array所有错误中的一个,例如['Email address cannot be blank', 'Email addresses must match']

但是,如果该字段有效且未发现错误,则getEmailErrors()返回null

在我的应用程序中,我想安全地链接更多方法getEmailErrors(),例如getEmailErrors().join(','),但不事先检查null。相反,有没有办法(例如使用 ES6 代理)来getEmailAddress()了解它是否会返回一个Array,并安全地忽略任何方法join(),例如它返回的情况null

Array简单的解决方案是在有效的情况下返回一个空而不是null,但假设我无法更改它。

4

2 回答 2

0

它可以间接地完成。

以下代码来自HERE,我添加了一些代码进行测试。

感谢原作者 Djamel Hassaine。

{
    class test {
		constructor () {
			this.in = 0;
        }
        sum ( a, b ) {
            this.in += a + b;
			return this;
        }
    }
    let k = new test();

    function traceMethodCalls(obj) {
        const handler = {
            get(target, propKey, receiver) {
                console.log( target, propKey, receiver );
				console.log( this );
				console.log( handler === this );
				const targetValue = Reflect.get(target, propKey, receiver);
                if (typeof targetValue === 'function') {
                    return function (...args) {
                        console.log('CALL', propKey, args);
						console.log( this );
						console.log( this === receiver );
                        return targetValue.apply(this, args); // (A)
                    }
                } else {
                    return targetValue;
                }
            }
        };
        return new Proxy(obj, handler);    
    }

	let l = traceMethodCalls( k );
	console.log( l.sum( 1, 2 ) );
	console.log( l );
	console.log( l.sum( 1, 2 ) );
	console.log( l );
}

另一种方式:

User.validators.getEmailErrorsOriginal = User.validators.getEmailErrors
User.validators.getEmailErrors = function ( ...args ) {
  return ( this.getEmailErrorsOriginal( ...args ) || [] );
}

于 2018-04-27T03:03:16.290 回答
0
(getEmailErrors() || []).join(',')

这是你要找的吗?它不是很干净,但肯定很短......

于 2018-04-27T03:03:54.347 回答