JavaScript类的写法 , 仿jQuery

看了javascript 杂谈之哪种写法你更喜欢?后很是有收获,所以总结一下:

1.js支持“逻辑短路”,所谓逻辑短路是指:

  1. 在”||” 运算中,第一个条件符合就结束判断。
  2. 在”&&”运算中,第一个条件不符合就结束判断。

2.匿名函数

(
function
() {
    })();

这种写法作用是声明并执行一个方法,等同于:

function
 Test() {
    }
    Test();

3.连续赋值

var a = {n:1};

var b = a;

a.x = a = {n:2}; //相当于a.x=(a={n:2})

console.log("a.x: " + a.x); //返回值:a.x: undefined

console.log("a.n: " + a.n); //返回值:a.n: 2

console.log("b.x: " + b.x); //返回值:b.x: [object Object]

console.log("b.n: " + b.n); //返回值:b.n: 1

说明:由于js中的连续赋值是按引用传递的,所以在a.x=a={n:2}后,两个a已经不是一个对象了,所以现在的a中并没x这个属性

4.下边这段代码类似与jquery中的写法

(function (windows) {
        var yQuery = function () {
                //获取对象本身
                return yQuery.fn.init();
        };
        yQuery.fn = yQuery.prototype = {
                //初始化
                inti: function () {
                        return this;
                }
        };
        //这里定义扩展方法
        yQuery.extend = yQuery.fn.extend = function () {
                var options, src, copy,
            target = arguments[0] || {},
            i = 1,
            length = arguments.length;
                if (length === i) {
                        //this=yQuery=$
                        target = this;
                        --i;
                }

                for (; i < length; i++) {
                        if ((options = arguments[i]) != null) {
                                for (var name in options) {
                                        src = target[name];
                                        copy = options[name];
                                        //判断this中是否存在,存在则跳过,执行下一次循环
                                        if (src === copy) {
                                                continue;
                                        }
                                        //判断是不是对象,如果是对象则递归
                                        if (typeof copy === "object") {
                                                yQuery.extend(name, copy);
                                        }
                                        if (copy !== undefined) {
                                                //这里的target=yQuery=$
                                                target[name] = copy;
                                        }
                                }
                        }
                }
                return target;
        };
        //向window中添加yQuery和$属性
        windows.yQuery = windows.$ = yQuery;
})(window);
使用:

方法一:

$.extend({Name:””,getName:function(){alert($.Name)}});

方法二:

$.ui=$.ui || {}; //如果$.ui存在则把自己赋值给自己,反之添加ui并赋值为空对象{}

$.extend($.ui,{Name:””,getName:function(){alert($.Name)}});