tool.js

通过prototype属性拓展js API的对象的功能

添加trim方法、reverse方法、toCharArray方法、以及为其shift()、unshift()方法弄个别名,还有写一个println()函数。

function print(str){
document.write(str);
}

function println(str){
document.write(str+"<br/>");
}

///通过prototype属性扩展js API的对象的功能/
String.prototype.trim = function(){
var start=0;//第一个非空格字符的位置
var end=this.length-1;//最后一个非空格字符的位置
while(start<=end && this.charAt(start)==' '){
start++;
}
while(start<=end && this.charAt(end)==' '){
end--;
}
return this.substring(start,end+1);
};
//※把trim方法融入到String对象中: str.trim()


//给String对象添加一个toCharArray()方法
String.prototype.toCharArray=function(){
var chs=[];
for(var x=0;x<this.length;x++){
chs[x]=this.chatAt(x);

}
return chs;
};

//给String对象添加一个reverse()方法
String.prototype.reverse = function(){
//函数内部可以再定义函数----Java做不到
function swap(arr,start,end){
var temp=arr[start];
arr[start]= arr[end];
arr[end] = temp;
}

var arr = this.toCharArray();
for(var start=0,end=arr.length-1; start<end; start++,end--){
swap(arr,start,end);
}
return arr.join("");
};

String.prototype.compareTo=function(str){
if(typeof(str)!="string"){
return 1;
}

var len1=this.length;
var len2=str.length;
var shortLen=len1>len2?len2:len1;
var longLen=len1>len2?len1:len2;
for(var i=0; i<shortLen; i++){
if(this.charAt(i)!=str.charAt(i)){
return this.charAt(i)-str.charAt(i);
}
}
if(len1>len2){
return 1;
}else if(len1<len2){
return -1;
}else{
return 0;
}

};


//为数组对象的shift()和unshift()函数取两个我们习惯的别名
Array.prototype.removeFirst=function(){
return this.shift();
};

Array.prototype.addFirst=function(e){
return this.unshift(e);
};

Array.prototype.addLast=function(e){
return this.push(e);
};

JS语言中的对象----Array对象

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JS语言中的对象--Array对象</title>
<script type="text/javascript" src="tools.js"></script>
</head>
<body>
<script type="text/javascript">
//js中只有一个容器----Array
var arr = [ "ccc", "aaa", "ddd", "opq", "bbb" ];
var arr2 = [ 1, 2, 3, 4, 5 ];
println(arr);
println(arr2);

//concat()方法:连接两个或更多的数组,并返回结果。---现场保护方式
var newArr = arr.concat(arr2);
println(arr);
println(newArr);

//join()方法:把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
println( newArr ); //toString(),相当于join()
println( newArr.join() ) ; //空参方法,用“,”作为分隔符
println( newArr.join(",") );
//以上三行功能一样

println( newArr.join("-*") ); //自己指定元素之间的分隔符
println( newArr.join("") ); //自己指定元素之间的分隔符(这里为"没有分隔符")

println("<hr/>");

//pop()方法:删除并返回数组的最后一个元素
println( arr );
var lastE = arr.pop();
println(lastE);
println( arr );
//push()方法:addLast(), 向数组的末尾添加一个或更多元素,并返回新的长度。
var len = arr.push("Jack",20,"Male");
println( len );
println( arr );

//reverse(): 颠倒数组中元素的顺序。 ---原地修改
arr.reverse();
println(arr);

//shift(): removeFirst(), 删除并返回数组的第一个元素
var firstE = arr.shift();
println(firstE);
println(arr);

//unshift(): addFirst(), 向数组的开头添加一个或更多元素,并返回新的长度。
arr.unshift(66);
println(arr);
arr.addLast(9);
arr.addFirst(3.14);
println(arr);

//slice(): slice(start,end) 参数为负数时是倒数的意思
println( arr.slice(2, 4) ); //把[2,4)范围内的元素返回出来,,现场保护方式---该方法并不会修改数组,而是返回一个子数组。
println( arr.slice(-4, -2)); // [倒数第4个 , 倒数第2个)
println( arr.slice(-3) ); //[倒数第3个,末尾]

//sort(): 对数组的元素进行排序, sort( cmpFun )
arr.sort();
println(arr);

//自定义排序----所有字符串都比数字小,然后字符串与数字自身的比较规则为小的在前
arr.sort( function(a,b){
if(typeof(a)=="number"){
if(typeof(b)=="string"){
return 1;
}else if(typeof(b)=="number"){
return a-b;
}
} else if( typeof(a)=="string"){
if(typeof(b)=="number"){
return -1;
}else if(typeof(b)=="string"){
return a.compareTo(b);
}
}

});
println(arr); //Jack,aaa,ccc,ddd,opq,3.14,9,20,66

//splice()方法: 向/从数组中添加/删除项目,然后返回被删除的项目。
var temp = arr.splice(1, 3, "france",2,1,"australia"); //从位置1开始删除3个元素,并在删除位置添加:"france",2,1,"australia"
println(temp); //aaa,ccc,ddd
println( arr ); //Jack,"france",2,1,"australia",opq,3.14,9,20,66

//toSource()方法: 返回对象的源代码
</script>
</body>
</html>

 

JS语言中的对象--String高级用法

通过对象的prototype属性可以为它添加变量与方法 ,给原型对象(js已经创建好的String,Array,Date,Number这些),添加变量

或函数之后,所有的克隆体(我们声明与创建的对象)都有了。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JS语言中的对象--String高级用法</title>
<script type="text/javascript" src="tools.js"></script>
</head>
<body>
<script type="text/javascript">
//construcor属性
var str = new String("abc123");
println(str.constructor); //类似于Java中的instanceof
if (str.constructor == String) { //Java的写法: str instanceof String
println("一个String实例");
}
</script>

<h3>prototype属性的引例:为String对象添加一个trim()方法</h3>
<script type="text/javascript">
function trim(str) { //去除str两端的空格
var start = 0;//第一个非空格字符的位置
var end = str.length - 1;//最后一个非空格字符的位置
while (start <= end && str.charAt(start) == ' ') {
start++;
}
while (start <= end && str.charAt(end) == ' ') {
end--;
}
return str.substring(start, end + 1);
}
var str = " abc 123a ";
alert("--" + str + "--");
alert("--" + trim(str) + "--");
</script>

<script type="text/javascript">
//通过对象的prototype属性可以为它添加变量与方法
/*给原型对象(js已经创建好的String,Array,Date,Number这些)
添加变量或函数之后,所有的克隆体(我们声明与创建的对象)都有了。*/

//1 添加变量
String.prototype.ab = 100;//类似于在Java的类模板中添加变量
println("ab:" + "abc".ab);
String.prototype.x = 3.14;
println("x:" + "aa".x);

//2 添加函数
function aa() {
alert("1111111....");
}
String.prototype.aa = aa; //把一个函数引用赋给原型对象
"abcd".aa();
//匿名函数的方式添加
String.prototype.ff = function() {
alert("222222222...");
};
"abc".ff();
</script>

<script type="text/javascript">
//※把trim方法融入到String对象中: str.trim()---代码已经移植到tools.js中了
var str2 = " dddd 123dd ";
alert("--" + str2.trim() + "--");

alert(str2.trim().toCharArray());

alert(str2.trim().reverse());
</script>
</body>
</html>