js中没有list类,可以使用Array来实现list类

(function(win) {
var ArrayList = function() {
this.datas = [];
}; var proto = ArrayList.prototype; proto.size = function() {
return this.datas.length;
}; proto.isEmpty = function() {
return this.size() === 0;
}; proto.contains = function(value) {
//return this.datas.indexOf(value) !== -1;
}; proto.indexOf = function(value) {
for ( var index in this.datas) {
if (this.datas[index] === value) {
return index;
}
} return -1;
}; proto.lastIndexOf = function(value) {
for ( var index = this.size(); index >= 0; index--) {
if (this.datas[index] === value) {
return index;
}
}
}; proto.toArray = function() {
return this.datas;
}; proto.outOfBound = function(index) {
return index < 0 || index > (this.size() - 1);
}; proto.get = function(index) {
if (this.outOfBound(index)) {
return null;
} return this.datas[index];
}; proto.set = function(index, value) {
this.datas[index] = value;
}; proto.add = function(value) {
this.datas.push(value);
}; proto.insert = function(index, value) {
if (this.outOfBound(index)) {
return;
} this.datas.splice(index, 0, value);
}; proto.remove = function(index) {
if (this.outOfBound(index)) {
return false;
} this.datas.splice(index, 1);
return true;
}; proto.removeValue = function(value) {
if (this.contains(value)) {
this.remove(this.indexOf(value));
return true;
}
return false;
}; proto.clear = function() {
this.datas.splice(0, this.size());
}; proto.addAll = function(list) {
if (!list instanceof ArrayList) {
return false;
} for ( var index in list.datas) {
this.add(list.get(index));
} return true;
}; proto.insertAll = function(index, list) {
if (this.outOfBound(index)) {
return false;
} if (!list instanceof ArrayList) {
return false;
} var pos = index;
for(var index in list.datas)
{
this.insert(pos++, list.get(index));
}
return true;
}; function numberorder(a, b) {
return a - b;
} proto.sort = function(isNumber){
if(isNumber){
this.datas.sort(numberorder);
return;
} this.datas.sort();
}; proto.toString = function(){
return "[" + this.datas.join() + "]";
}; proto.valueOf = function(){
return this.toString();
}; win.ArrayList = ArrayList;
})(window);

ArrayList.js

下面是测试页面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ArrayList Test</title>
<script type="text/javascript" src="ArrayList.js"></script>
<script type="text/javascript">
window.print = function(value) {
//alert("window.print");
document.write(value);
}; window.println = function(value) {
//alert("window.println");
print(value);
document.write("<br/>");
}; var list = new ArrayList();
list.add("jack");
list.add(43);
list.add(true);
println("----------------------");
println(list.get(0));
println(list.get(1));
println(list.get(2));
println(list.get(3));
println("----------------------"); println(list.size()); list.remove(2);
println(list);
println("----------------------"); println(list.isEmpty());
list.clear();
println(list.isEmpty());
println("----------------------"); list.add("jack");
list.add(43);
list.add(true); var list2 = new ArrayList();
list2.addAll(list);
println(list2);
println("----------------------"); list2.insert(1,"male");
println(list2);
println("----------------------"); list2.removeValue(true);
println(list2);
println("----------------------"); list2.insertAll(2,list);
println(list2);
println("----------------------"); println(list2.contains("jack"));
println("----------------------"); list2.clear();
list2.add(1111);
list2.add(222);
list2.add(33);
list2.add(4); list2.sort();//按字母顺序排
println(list2);
println("----------------------"); list2.sort(true);//按数字顺序排
println(list2);
println("----------------------"); </script>
</head>
<body> </body>
</html>

ListTest.html

测试结果:

----------------------
jack
43
true
null
----------------------
3
[jack,43]
----------------------
false
true
----------------------
[jack,43,true]
----------------------
[jack,male,43,true]
----------------------
[jack,male,43,true]
----------------------
[jack,male,jack,43,true,43,true]
----------------------
undefined
----------------------
[1111,222,33,4]
----------------------
[4,33,222,1111]
----------------------

js 实现list类的更多相关文章

  1. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

  2. 通过寄生组合式继承创建js的异常类

    最近项目中在做js的统一的异常处理,需要自定义异常类.理想的设计方案为:自定义一个异常错误类BaseError,继承自Error,然后再自定义若干个系统异常,例如用户取消异常.表单异常.网络异常,这些 ...

  3. JS中定义类的方法

    JS中定义类的方式有很多种: 1.工厂方式    function Car(){     var ocar = new Object;     ocar.color = "blue" ...

  4. js模块,类,继承,命名空间,私有属性等相关概念梳理

    js确切的说是一种基于对象的语言,和纯面向对象的语言(比如as)稍微有点区别,js中没有类的概念.虽然有继承但是基于原型的继承.随着前段越来越受重视,jser们利用js的一些特性他们制造出了和纯面向对 ...

  5. JS中定义类的方法<转>

    转载地址:http://blog.csdn.net/sdlfx/article/details/1842218 PS(个人理解): 1) 类通过prototype定义的成员(方法或属性),是每个类对象 ...

  6. js集合set类的实现

    js集合set类的实现 /*js集合set类的实现*/ function Set() { this.dataStore = []; this.add = add;//新增元素 this.remove ...

  7. 使用js栈stack类的实现

    使用js栈stack类的实现 /*使用栈stack类的实现*/ function stack() { this.dataStore = [];//保存栈内元素,初始化为一个空数组 this.top = ...

  8. js中的类和对象以及自定义对象

    js中的类 1.类的声明 function Person(name,age){ this.name=name; this.age=age; this.test=function(a){ alert(a ...

  9. js中尺寸类样式

    js中尺寸类样式 一:鼠标尺寸类样式 都要事件对象的配合 Tip:注意与浏览器及元素尺寸分开,鼠标类尺寸样式都是X,Y,浏览器及元素的各项尺寸时Height,Width 1:检测相对于浏览器的位置:e ...

  10. koa 基础(十七)原生 JS 中的类、静态方法、继承

    1.app.js /** * 原生 JS 中的类.静态方法.继承 * es5中的类和静态方法 */ function Person(name, age) { // 构造函数里面的方法和属性 this. ...

随机推荐

  1. 限制SSH访问源,禁止4A之外的地址跳转访问

    [fuel节点] 在/etc/hosts.allow文件中添加: sshd:10.129.0.1:allow sshd:10.129.0.2:allow sshd:10.129.0.3:allow s ...

  2. 查看cpu、内存和硬盘

    查看cpu cat /proc/cpuinfo 查看内存 top free -m 按兆为单位输出内存的已用,未用,总共等结果 cat /proc/meminfo |grep MemTotal 查看硬盘 ...

  3. jQuery动态添加元素并绑定事件

    写网页的时候常常需要根据实际情况添加新的元素,然后这些新元素还需要绑定已有的事件,如:有一ul,点击其中某 li,根据其 id 或 value 等获取新的数据列表,并新建 ul 显示,新 ul 中的 ...

  4. 写在十年 2007-09-15 (写给L之三)

    你知道吗? 那种时间很远,但心很近的感觉.   时间已经远去了十年, 但亲切的感觉依然清晰可见,   无论时光远去了十年,二十年,三十年, 永远…… 它已经植根,在心间……

  5. awk!字符问题,修复中!.......

    awk '条件类型1{动作1} 条件类型2{动作2}' file1 file2 变量名称:1.NF 每一行($0表示文本所有域)拥有的字段数. 2.NR目前awk处理的"第n行"数 ...

  6. Android SDK Manager国内无法更新的解决方案

    万里长城永不倒,千里黄河水滔滔.算了跑题了. 但还是要吐槽这下这个万里长城,感谢 方滨兴 叫兽 给我们净化了互联网,靠!什么&!@#¥ 此处略去一万字. 现在由于GWF,google基本和咱们 ...

  7. MySQL和Navicat使用总结

    1.给字段设置默认字符值 ALTER TABLE `v_users`MODIFY COLUMN `picture` varchar(50) CHARACTER SET utf8 COLLATE utf ...

  8. 64位Python安装PIL

    写个小程序需要安装PIL,但是官网只有32位,无法找到64位安装路径.根据网上教程自行编译,但是由于VS版本问题总是提示“Python error: Unable to find vcvarsall. ...

  9. WPF后台更换背景图-Background

    Uri uri = new Uri("Images/BACK.gif", UriKind.Relative);BitmapImage bimg = new BitmapImage( ...

  10. 解决 ListView 水平滚动条不出现的问题(转载)

    问题的原因:http://www.cnblogs.com/nankezhishi/archive/2010/03/17/wpfbug13.html 解决方法:http://www.cnblogs.co ...