重构一些JavaScript

时间:2011-11-29 15:54:48

标签: javascript

我有两个几乎相同的函数,但我不确定如何重构它以便它们可以共享相同的逻辑。

function Content_chkClick(obj) {
    var frame = $('#iFM')[0];

    if (frame.contentWindow.Content_chkClick) {
        frame.contentWindow.Content_chkClick(obj);
    } else {
        $('.TabContent', frame.contentWindow.document).each(function () {
            var frame = this;
            if (frame.contentWindow.Content_chkClick) {
                frame.contentWindow.Content_chkClick(obj);
            }
        });
    }
}

function Content_invokeClickEvent(id) {
    var frame = $('#iFM')[0];

    if (frame.contentWindow.Content_invokeClickEvent) {
        frame.contentWindow.Content_invokeClickEvent(id);
    } else {
        $('.TabContent', frame.contentWindow.document).each(function () {
            var frame = this;
            if (frame.contentWindow.Content_invokeClickEvent) {
                frame.contentWindow.Content_invokeClickEvent(id);
            }
        });
    }
}

最终,我想要做的就是拥有像

这样的东西
function Content_chkClick(obj) {
    someCommonFunction(Content_chkClick, obj);
}
function Content_invokeClickEvent(id) {
    someCommonFunction(Content_invokeClickEvent, id);
}

1 个答案:

答案 0 :(得分:1)

function Content_xClick(fname, obj) {
    function callIfPossible(frame) { 
        if (frame.contentWindow[fname]) {
            frame.contentWindow[fname](obj);
            return true;
        }
    }

    if (!callIfPossible($('#iFM')[0])) {
        $('.TabContent', $('#iFM')[0].contentWindow.document).each(function () {
            callIfPossible(this);
        });
    }
}

最终,你应该做的就像是

function Content_chkClick(obj) {
    Content_xClick("Content_chkClick", obj);
}
function Content_invokeClickEvent(id) {
    Content_xClick("Content_invokeClickEvent", id);
}