javascript – 任何缩短此类连锁电话的方法?

有没有办法缩短这种连锁电话?

if (obj && obj.prop && obj.prop.subProp1 && obj.prop.subProp1.subPropFunc) {
    obj.prop.subProp1.subPropFunc();
}

我能想到的唯一选择是try-catch.还有其他想法吗?
*我真的厌倦了写这些.在coffeescript使用它会更容易吗?

最佳答案 这应该适用于您的示例代码(未测试“所有案例”,只是您的样本的副本):

function propsExist(obj) {
    if (!obj) return false;
    for (var i = 1; i < arguments.length; i++) {
        if (!obj[arguments[i]]) return false;
        obj = obj[arguments[i]];
    }
    return true;
}

if (propsExist(obj, "prop", "subProp1", "subPropFunc")) {
    obj.prop.subProp1.subPropFunc();
}

方法propsExist()接受可变数量的参数,第一个参数是您要检查属性/函数的原始对象.它将遍历您发送给它的属性列表并按顺序检查它们.如果不存在,则返回false.如果它通过整个循环,它成功验证!

如果你总是想调用子属性的函数,如果它验证了,你也可以只更改propsExist函数来调用它而不是返回true(然后将函数重命名为callIfValid(obj,…)

点赞