Array.prototype.re = function() { 
alert("");

网上看到的这种封装,我仅仅知道,这个用一个数组arr.re()就可以调用.
---------------------------
function a(){
alert("");
}
这种普通的封装方法。我仅仅知道这个直接a()可以调用。
---------------------------
(function() {
window.a = {
aa : function(){
alert("");
}
};
})();
这种封装方法我仅仅知道定义一个全局变量a, a.aa()调用aa方法。
---------------------------请高人介绍一下其他的封装方法,或者详细讲解下这三种封装方法的各种巧妙用法什么的。
或者说下这三种方法的不同,和优缺点。自己太菜,csdn也没分。所以各位高手们也可以去度娘知道
http://zhidao.baidu.com/question/265009219.html
分数+100.
(这是跟上面以为小哥学的)

解决方案 »

  1.   

    你写的三种方法,代表了js的三个不同的方面。正式项目中,3种会同时用到
    先说第一种
    function Animal() {}Animal.prototype.sayHello() {
        alert("hello");
    }
    new Animal().sayHello();
    这样定义有什么好处?prototype可以看成是一种模板。也就是说,定义在prototype上的东西只会被设定一次,而不会再每次new的时候调用。
    而以下方式则会每次都调用,效率低。
    function Animal() {
        this.sayHello = function() {
            alert("hello");
        };
    }
    new Animal().sayHello();接下来说说第三种方式是干什么用的
    先看以下代码:
    (function() {
        var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
        var Chart = function() {
            if (isIE) {
                alert("IE");
            } else {
                alert("Other");
            }
        };    org = {
            Chart: Chart
        };})();
    new org.Chart();这样写的好处:
    1.看isIE。这里用var定义,限制了变量的作用域,杜绝变量冲突
    2.看org = {}这行,变相实现了namespace。最后说说一般的写法用在什么场合。(function() {
         function Test() {}
    })();
    // undefined
    alert(Test);
    相当于一个private方法
      

  2.   

    在ECMAScript5中,提供了一种可以不用function的newInstance方法:Object.create。基于这种方法,你的第一种可以不需要了。
    具体你可以参考我的博客
    http://rainsilence.iteye.com/blog/1026530
    http://rainsilence.iteye.com/blog/892002