没有用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