js面向对象实践

没有用class新语法

demo

<html>
<script>
var Book = (function(){
    // 私有静态属性
    var numOfBook = 0;

    // 构造函数
    var construct = function(argument){
        // 私有属性
        var name;

		// 公共方法
        this.setName = function(name){
        	this.name=name;
        	return this;
        };
        this.getName = function(){
        	return this.name;
        };
        
        // 私有方法
        function checkName(name){
        	// ...
        }
        
        numOfBook++;
    };

    // 公共静态方法
    construct.getNumOfBook = function(){
    	return numOfBook;
    };

    // 返回构造函数
    return construct;
})();

// 公有静态方法
Book.display = function(){
	// ...
};

// 调用。。。
var book01 = new Book();
var book02 = new Book();
book01.setName("天书");
console.log(book01.getName()); // 输出 天书
console.log(Book.getNumOfBook()); // 输出 2
</script>
</html>

实践 后台管理列表数据页面 查询功能–多排序字段

GET http://localhost:8998/user?pageNum=1&pageSize=10&sortField=username,age&isAsc=true,false
排序字段:sortField,是否升序:isAsc
这两个字段的个数和顺序要对应

<html>
<script>
var LinkedMap = (function(){
	"use strict";
	// 静态私有属性
	var version = "1.0.0";
	
	// 构造函数
	var construct = function(argument){
	    // 公共属性
	    this.version =version;
	    // 私有属性
	    var fieldArr= new Array;
	    // 私有属性
	    var isAscArr= new Array;
	
	    // 私有方法
	    function serialize(o){
	        return o.toString();
	    }
	
	    // 公共方法
	    this.put = put;
	    function put (field, isAsc){
	        if(arguments.length !=put.length){console.error("arguments length Mismatch...");  return false;}
	        if(typeof field != 'string'){
	            console.error(" typeMismatch......"+field+" must string");
	            return false;
	        }else if(typeof isAsc != 'boolean'){
	            console.error(" typeMismatch......"+isAsc+" must boolean");
	            return false;
	        }
	        fieldArr.push(field);
	        isAscArr.push(isAsc);
	        return this;
	    };
	    
	    // 公共方法
	    this.getSortField = function(){
	        return serialize(fieldArr);
	    }
	    this.getIsAsc = function(){
	        return serialize(isAscArr);
	    }
	
	    // 公共方法 重写toString方法
	    this.toString = function() {
	        if(0===fieldArr.length || 0===isAscArr.length) return "";
	        return "sortField="+serialize(fieldArr)+"&isAsc="+serialize(isAscArr);
	    }
	
	};
	
	// 公共方法 重写toString方法
	// construct.prototype.toString = function() {
	//     return "这里无法访问到私有属性。。。";
	// }
	// 公共属性
	construct.prototype.name="linkedmap";
	
	// 返回构造函数
	return construct;
})();

// 调用
var lmap = new LinkedMap();
// username 升序
lmap.put('username',true);
// username 降序
lmap.put('age',false);
// 这个没用,写着玩
lmap.version // 输出 "1.0.0"
// 这个没用,写着玩
lmap.toString(); // 输出 "sortField=username,age&isAsc=true,false"
// 有用,还是写着玩
lmap.getSortField(); // 输出 "username,age"
lmap.getIsAsc(); // 输出 "true,false"
</script>
</html>

实践-优化 后台管理列表数据页面 查询功能–多排序字段

GET http://localhost:8998/user?pageNum=1&pageSize=10&sortField=username,age&isAsc=true,false
排序字段:sortField,是否升序:isAsc
这两个字段的个数和顺序要对应

<html>
<script>
    (function (r) {
        "use strict";
        if (typeof exports === "object" && typeof module !== "undefined") {
            module.exports = r();
        } else {
            if (typeof define === "function" && define.amd) {
                define("linkedmap",[], r);
            } else {
                var e; 
                if (typeof window !== "undefined") { 
                    e = window; 
                } else {
                    if (typeof global !== "undefined") {
                         e = global;
                    } else { 
                        if (typeof self !== "undefined") { 
                            e = self;
                        } else { 
                            e = this;
                        }
                    }
                } 
                e.LinkedMap = r;
            }
        }
    })(
    (function(){
        "use strict";
        // 静态私有属性
        var version = "1.0.0";

        // 构造函数
        var construct = function(argument){
            // 公共属性
            this.version =version;
            // 私有属性
            var fieldArr= new Array;
            // 私有属性
            var isAscArr= new Array;

            // 私有方法
            function serialize(o){
                return o.toString();
            }

            // 公共方法
            this.put = put;
            function put (field, isAsc){
                if(arguments.length !=put.length){console.error("arguments length Mismatch...");  return false;}
                if(typeof field != 'string'){
                    console.error(" typeMismatch......"+field+" must string");
                    return false;
                }else if(typeof isAsc != 'boolean'){
                    console.error(" typeMismatch......"+isAsc+" must boolean");
                    return false;
                }
                fieldArr.push(field);
                isAscArr.push(isAsc);
                return this;
            };
            
            // 公共方法
            this.getSortField = function(){
                return serialize(fieldArr);
            }
            this.getIsAsc = function(){
                return serialize(isAscArr);
            }

            // 公共方法 重写toString方法
            this.toString = function() {
                if(0===fieldArr.length || 0===isAscArr.length) return "";
                return "sortField="+serialize(fieldArr)+"&isAsc="+serialize(isAscArr);
            }

        };

        // 公共方法 重写toString方法
        // construct.prototype.toString = function() {
        //     return "这里无法访问到私有属性。。。";
        // }
		// 公共属性
		construct.prototype.name="linkedmap";
        // 返回构造函数
        return construct;
    })()
);

// 调用
var lmap = new LinkedMap();
// username 升序
lmap.put('username',true);
// username 降序
lmap.put('age',false);
// 这个没用,写着玩
lmap.version // 输出 "1.0.0"
// 这个没用,写着玩
lmap.toString(); // 输出 "sortField=username,age&isAsc=true,false"
// 有用,还是写着玩
lmap.getSortField(); // 输出 "username,age"
lmap.getIsAsc(); // 输出 "true,false"
</script>
</html>

http://localhost:8998/user?pageNum=1&pageSize=10&sortField=username,age&isAsc=true,false&rules={“username”:“admin”,“age”:22}
//serialize
var rulesObj = {username:“admin”,age:22};
window.encodeURIComponent(JSON.stringify(rulesObj)) // %7B%22username%22%3A%22admin%22%2C%22age%22%3A22%7D
http://localhost:8998/user?pageNum=1&pageSize=10&sortField=username,age&isAsc=true,false&rules=%7b%22username%22%3a%22admin%22%2c%22age%22%3a22%7d&rules=%7B%22username%22%3A%22admin%22%2C%22age%22%3A22%7D

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值