如何从 JavaScript 中的 chaininig 中动态排除对象?
How to dynamically exclude the object from the chaininig in JavaScript?
我得到了对象结构,其中 utils
和 utils.not
采用相同的原型(使用 exist
方法)。我简化了它以使其更清楚:
var negative = true;
if(negative){
//when negative===true, I want to run exist() through not object
tests.utils.not.exist();
} else {
tests.utils.exist();
}
有没有其他方法可以将 not
从链中排除而不是使用 IF
?如果我想将 not
对象更改为另一个对象,例如 positive
,我可以这样做:
tests.utils[negative ? 'not':'positive'].exist();
但是如何从链中动态排除 not
对象?
我的 IF
语法工作正常,但我只是想知道 JS 中是否有另一种(更优雅的)方式。
删除条件(if 或三元运算符)的唯一方法是将其隐藏在 exist()
方法中:
tests.utils.exist(negative); // true or false
并让 exist 方法选择逻辑。但我认为您当前的代码更清晰,显式 if
有助于更好地阅读和理解它,我不认为它是不优雅的代码。
由于您的 'to be executed' 方法取决于条件(负数 === true),您无法真正避免检查。但是,您可以编写一些智能代码:
let method = test.utils.exist;
if (negative) {
method = test.utils.not.exist;
}
method();
您可以使用代理来设置默认行为,然后按照您想要的方式调用它们,请查看示例
var handler = {
get: function(target, name) {
return target.hasOwnProperty(name) ? target[name] : target["default"];
}
};
var p = new Proxy({
default : {
exists : function(){
return 1;
}
},
not : {
exists : function(){
return 2;
}
}
}, handler);
let negative = false;
let x = p[negative === true ? "not" : "default"];
console.log(x.exists());
看看MDN docs
不确定这是否有用,但你可以这样做。
var objectToTrigger = negative ? tests.utils.not : tests.utils;
objectToTrigger.exist();
我得到了对象结构,其中 utils
和 utils.not
采用相同的原型(使用 exist
方法)。我简化了它以使其更清楚:
var negative = true;
if(negative){
//when negative===true, I want to run exist() through not object
tests.utils.not.exist();
} else {
tests.utils.exist();
}
有没有其他方法可以将 not
从链中排除而不是使用 IF
?如果我想将 not
对象更改为另一个对象,例如 positive
,我可以这样做:
tests.utils[negative ? 'not':'positive'].exist();
但是如何从链中动态排除 not
对象?
我的 IF
语法工作正常,但我只是想知道 JS 中是否有另一种(更优雅的)方式。
删除条件(if 或三元运算符)的唯一方法是将其隐藏在 exist()
方法中:
tests.utils.exist(negative); // true or false
并让 exist 方法选择逻辑。但我认为您当前的代码更清晰,显式 if
有助于更好地阅读和理解它,我不认为它是不优雅的代码。
由于您的 'to be executed' 方法取决于条件(负数 === true),您无法真正避免检查。但是,您可以编写一些智能代码:
let method = test.utils.exist;
if (negative) {
method = test.utils.not.exist;
}
method();
您可以使用代理来设置默认行为,然后按照您想要的方式调用它们,请查看示例
var handler = {
get: function(target, name) {
return target.hasOwnProperty(name) ? target[name] : target["default"];
}
};
var p = new Proxy({
default : {
exists : function(){
return 1;
}
},
not : {
exists : function(){
return 2;
}
}
}, handler);
let negative = false;
let x = p[negative === true ? "not" : "default"];
console.log(x.exists());
看看MDN docs
不确定这是否有用,但你可以这样做。
var objectToTrigger = negative ? tests.utils.not : tests.utils;
objectToTrigger.exist();