惰性函数定义模式 使用方法第3/3页

 更新时间:2007年09月20日 19:55:43   作者:  

总结

惰性函数定义模式让我可以编写一些紧凑、健壮、高效的代码。用到这个模式的每一次,我都会抽空赞叹JavaScript的函数式编程能力。

JavaScript同时支持函数式和面向对象便程。市面上有很多重点着墨于面向对象设计模式的书都可以应用到JavaScript编程中。不过却没有多少书涉及函数式设计模式的例子。对于JavaScript社区来说,还需要很长时间来积累良好的函数式模式。

更新:

这个模式虽然有趣,但由于大量使用闭包,可能会由于内存管理的不善而导致性能问题。来自 FCKeditor 的FredCK改进了getScrollY,既使用了这种模式,也避免了闭包:
复制代码 代码如下:

var getScrollY = function() { 

    if (typeof window.pageYOffset == 'number') 
        return (getScrollY = getScrollY.case1)(); 

    var compatMode = document.compatMode; 
    var documentElement = document.documentElement; 

    if ((typeof compatMode == 'string') && 
               (compatMode.indexOf('CSS') >= 0) && 
               (documentElement) && 
               (typeof documentElement.scrollTop == 'number')) 
        return (getScrollY = getScrollY.case2)(); 

    var body = document.body ; 
    if ((body) && 
               (typeof body.scrollTop == 'number')) 
        return (getScrollY = getScrollY.case3)(); 

    return (getScrollY = getScrollY.case4)(); 
}; 

getScrollY.case1 = function() { 
    return window.pageYOffset; 
}; 

getScrollY.case2 = function() { 
    return documentElement.scrollTop; 
}; 

getScrollY.case3 = function() { 
    return body.scrollTop; 
}; 

getScrollY.case4 = function() { 
        return NaN; 
}; 

相关文章

最新评论