ホームページ > ウェブフロントエンド > jsチュートリアル > Javascript_2_動的関数_匿名関数_文字列オブジェクト_プロトタイプ属性

Javascript_2_動的関数_匿名関数_文字列オブジェクト_プロトタイプ属性

黄舟
リリース: 2017-01-18 16:23:42
オリジナル
1070 人が閲覧しました

Javascript_2_Dynamic Function_Anonymous Function_String Object_Prototype 属性

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title>javascript演示4</title>
    </head>
    <body>
    <h1>javascript演示4</h1>
    <script type="text/javascript" src="a.js">    </script>
    <script type="text/javascript">
    /*
     * JS函数的其他表现形式:动态函数和匿名函数
     	1,动态函数,使用js内置对象Function对象
     	方法:new Function("参数列表","方法体");
     */
    var add=new Function("x,y","var sum;sum=x+y;return sum;");
    println(add(6,7));//13
    function add2(x,y){
    	var sum;
    	sum=x+y;
    	return sum;
    }
    /*
     * 这两种究竟有何区别?
     * 如果是function 函数名(){}这种写法就写死了!
     * 而,new Function("参数列表","方法体")
     * 参数列表和方法体 都是字符串,未知的,可变化
     * 可以通过字符串动态指定!但很少使用!
     */
    //匿名函数:没有名字的函数 是种简写形式,
    //这个在事件处理时,用得较多!
    var add3=function (x,y){
    	return x+y;
    }
    println(add3(4,6));
    
    function hehe(){
    	println("hehe run");
    }
    var xixi=hehe;//让xixi指向了hehe指向的函数对象
    /*
     * 上面这两段代码就可以简写成下面这一句代码:
     * 即匿名函数
     */
    var xixi=function(){
    	println("hehe run");
    }
    //综合练习1:求数组最大值
    var arr1=[2,4,6,7,133,244,67];
    function getMax(arr){
    	var maxIndex=0;
    	for (var i=0; i < arr.length; i++) {
            if(arr[i]>arr[maxIndex]){
            	maxIndex=i;
            }
        }
        return arr[maxIndex];
    }
    println(getMax(arr1));//244
    //综合练习2:选择排序
    function sortArray(arr){
    	for (var i=0; i < arr.length-1; i++) {
            for (var j=i; j < arr.length; j++) {
            	if (arr[i]>arr[j]) {
                    var temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;	
            	}
        	}
        }
    }
    println("排序前:"+arr1);
    //排序前:2,4,6,7,133,244,67
    sortArray(arr1);
    println("排序后:"+arr1);
	//排序后:2,4,6,7,67,133,244
	/*
	 * 函数对象被直接打印:字符串代码
	 * 数组对象被直接打印:逗号连接各个数组成员
	 */
	//综合练习3:查找 
	function searchElement(arr,value){
        for (var i=0; i < arr.length; i++) {
        	if(arr[i]==value){
                return i;
        	}
        }
        return -1;
	}
	println(searchElement(arr1,67));
	//折半查找:又称二分查找法(前提必须是有序的)
	function binarySearch(arr,value){
        var min,mid,max;
        min=0;
        max=arr.length-1;
        while(min<=max){
        	mid=(max+min)/2;
        	//也可以写成>>1
        	if (value>arr[mid]) {
                min=mid+1;
        	} 
        	else if (value<arr[mid]) {
                max=mid-1;
        	} 
        	else{
                return mid;
        	};
        }
        return -1;//循环完了还有找到
	}
	println(binarySearch(arr1,67));
	println(binarySearch(arr1,68));
	/*
	 * 综合练习4:对数组进行反转
	 */
	function reverseArray(arr){
        for(var start=0,end=arr.length-1;start<end;start++,end--){
        	swap(arr,start,end);
        }
	}
	function swap(arr,i,j){
        var temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
	}
	 println("反转前:"+arr1);
    reverseArray(arr1);
    println("反转后:"+arr1);
    //反转前:2,4,6,7,67,133,244
	//反转后:244,133,67,7,6,4,2
	/*
	 * JS变量的特点:
	 * 1,只有在函数体内定义的变量是局部变量
	 * function 函数名(){
	 * 	var sum=0;
	 * }
	 */
	function show(){
        var show_sum=1000;//这个是局部变量,函数体外不能使用!
        alert(show_sum);
	}
	/*
	 * 全局变量:在直接在script标签中定义的变量
	 * 在该页面的所有script标签都有效!
	 */
	var test_1="abc";
	for (var i=0; i < 3; i++) {
        println(i);
	}
    </script>
    <script type="text/javascript">
    	println(test_1);//abc
    	println(i);//3   在上一个script标签的for循环里定义的
    	println(arr1);//244,133,67,7,6,4,2
    	for (var i=0; i < 3; i++) {//这不是新定义变量,而是对已有i重新赋值
        }
        /*
         * 下面这个例子将演示形参
         */
        var x=3;
        function show(x){//形参,局部变量 
        	x=8;
        	println("函数里面:"+x);
        }
        show(x);
        println(x);//3
        function show(){
        	println("show run");
        }
        println(show.toString());//相当于alert(show);
        var arr=[2,4,6,7];
        println(arr.toString());//相当于
        println(arr);//相当于
        println(arr.valueOf());
        /*
         * valueOf 方法
返回指定对象的原始值。
object.valueOf( )
必选项 object 参数是任意固有 JScript 对象。 
说明
每个 JScript 固有对象的 valueOf 方法定义不同。
对象 返回值 
Array 数组的元素被转换为字符串,这些字符串由逗号分隔,
连接在一起。其操作与 Array.toString 和 Array.join 方法相同。 
Boolean Boolean 值。 
Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。 
Function 函数本身。 
Number 数字值。 
Object 对象本身。这是默认情况。 
String 字符串值。 
Math 和 Error 对象没有 valueOf 方法。 
         * 
         * 
         * toString 方法
返回对象的字符串表示。
objectname.toString([radix])
参数
objectname
必选项。要得到字符串表示的对象。
radix
可选项。指定将数字值转换为字符串时的进制。
说明
toString 方法是所有内建的 JScript 对象的成员。它的操作依赖于对象的类型:
对象 操作 
Array 将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。 
Boolean 如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。 
Date 返回日期的文字表示法。 
Error 返回一个包含相关错误消息的字符串。 
Function 返回如下格式的字符串,其中 functionname 
是被调用 toString 方法函数的名称: 
function functionname( ) { [native code] }
Number 返回数字的文字表示。 
String 返回 String 对象的值。 
默认 返回 “[object objectname]”,其中 objectname 是对象类型的名称。
         */
        var abc=function(){
        	println("abc run");
        }
        println(abc);
        println(abc.valueOf());
        println(arr.valueOf());
        //String对象
        var str1=new String("abc");
        var str2="abc";
        println(str1.length);
        println(str1.bold());
        println(str1.fontcolor("red"));
        println(str1.link("http://www.baidu.com"));
        /*
         * 在Java中获取字符串长度是用方法()
         * 而在JS当中,用的是属性!注意区别
         * substr 方法
返回一个从指定位置开始的指定长度的子字符串。
stringvar.substr(start [, length ])
参数
stringvar
必选项。要提取子字符串的字符串文字或 String 对象。
start    必选项。所需的子字符串的起始位置。
字符串中的第一个字符的索引为 0。
length   可选项。在返回的子字符串中应包括的字符个数。
说明
如果 length 为 0 或负数,将返回一个空字符串。
如果没有指定该参数,则子字符串将延续到 stringvar 的最后。
下面的示例演示了substr 方法的用法。
function SubstrDemo(){
   var s, ss;                // 声明变量。
   var s = "The rain in Spain falls mainly in the plain.";
   ss = s.substr(12, 5);  // 获取子字符串。
   return(ss);               // 返回 "Spain"。
}
         * 
         * 
         * substring 方法
返回位于 String 对象中指定位置的子字符串。 
strVariable.substring(start, end)
"String Literal".substring(start, end)
参数
start
指明子字符串的起始位置,该索引从 0 开始起算。
end
指明子字符串的结束位置,该索引从 0 开始起算。
说明
substring 方法将返回一个包含从 start 到最后(不包含 end )的子字符串的字符串。
substring 方法使用 start 和 end 两者中的较小值作为子字符串的起始点。
例如, strvar.substring(0, 3) 和 strvar.substring(3, 0) 将返回相同的子字符串。 
如果 start 或 end 为 NaN 或者负数,那么将其替换为0。 
子字符串的长度等于 start 和 end 之差的绝对值。
例如,在 strvar.substring(0, 3) 和 strvar.substring(3, 0) 
返回的子字符串的的长度是 3。 
下面的示例演示了 substring 方法的用法。
function SubstringDemo(){
   var ss;                         // 声明变量。
   var s = "The rain in Spain falls mainly in the plain..";
   ss = s.substring(12, 17);   // 取子字符串。
   return(ss);                     // 返回子字符串。
}
         * 
         * charAt 方法
返回指定索引位置处的字符。
strObj.charAt(index)
参数
strObj
必选项。任意 String 对象或文字。
index
必选项。想得到的字符的基于零的索引。有效值是 0 与字符串长度减 1 之间的值。
说明
charAt 方法返回一个字符值,该字符位于指定索引位置。
字符串中的第一个字符的索引为 0,第二个的索引为 1,
等等。超出有效范围的索引值返回空字符串。
示例
下面的示例说明了 charAt 方法的用法:

function charAtTest(n){
   var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 初始化变量。
   var s;                                  // 声名变量。
   s = str.charAt(n - 1);                  // 从索引为n – 1的位置处
                                           // 获取正确的字符。
   return(s);                              //返回字符。
}
         * 
         */
        var str="abcde";
        println(str.substr(1,3));//从下标为1开始取3个长度:bde
        println(str.substring(1,3));//开始为1,结束为3,长度为2: bc
        /*
         * 练习1:自定义方法,去除字符串两端的空格
         * 两个指针,一个从头找空格,一个从尾找空格,再取长度
         * 同时提防 字符串全是空格的情况 
         */
        function trim(str){
        	var start,end;
        	start=0;
        	end=str.length-1;
        	while(start<=end&&str.charAt(start)==&#39; &#39;){
                start++;
        	}
        	while(start<=end&&str.charAt(end)==" "){
                end--;
        	}
        	return str.substring(start,end+1);//关键!!!
        }
        str="      a   bc     ";
        println("-"+trim(str)+"-");
        /*
         * prototype 属性
返回对象类型原型的引用。
objectName.prototype
objectName 参数是对象的名称。 
说明
用 prototype 属性提供对象的类的一组基本功能。 
对象的新实例“继承”赋予该对象原型的操作。 
例如,要为 Array 对象添加返回数组中最大元素值的方法。
 要完成这一点,声明该函数,将它加入 Array.prototype, 并使用它。 
function array_max( ){
   var i, max = this[0];
   for (i = 1; i < this.length; i++)
   {
   if (max < this[i])
   max = this[i];
   }
   return max;
}
Array.prototype.max = array_max;
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max( );
该代码执行后,y 保存数组 x 中的最大值,或说 6。
所有 JScript 固有对象都有只读的 prototype 属性。
可以象该例中那样为原型添加功能,但该对象不能被赋予不同的原型。
然而,用户定义的对象可以被赋给新的原型。
本语言参考中每个内部对象的方法和属性列表
指出哪些是对象原型的部分,哪些不是。 
         */
        //prototype属性,需求:将trim功能添加到String对象里面去
        //第1种方法;先定义好函数,再指向引用,即函数名
        //函数没参数,函数体使用this
        //第2种方法:使用匿名函数
        function trim2(){
        	var start,end;
        	start=0;
        	end=this.length-1;
        	while(start<=end&&this.charAt(start)==&#39; &#39;){
                start++;
        	}
        	while(start<=end&&this.charAt(end)==" "){
                end--;
        	}
        	return this.substring(start,end+1);//关键!!!
        }
        String.prototype.trim=trim2;
        str1="      a   bc     ";
        println("-"+str1.trim()+"-");
        //第2种演示:
        String.prototype.trim1=function(){
        	var start,end;
        	start=0;
        	end=this.length-1;
        	while(start<=end&&this.charAt(start)==&#39; &#39;){
                start++;
        	}
        	while(start<=end&&this.charAt(end)==" "){
                end--;
        	}
        	return this.substring(start,end+1);//关键!!!
        }
        str2="      ab   bc     ";
        println("-"+str2.trim1()+"-");
        String.prototype.len=199;
        println("abc".len);
        //原型练习1:将字符串变成字符数组
        String.prototype.toCharArray=function(){
        	var chs=[];
        	for (var i=0; i < this.length; i++) {
                chs[i]=this.charAt(i);
        	}
        	return chs;
        }
        str3="a      ab   bcd     z";
        println(str3);
        println(str3.toCharArray());
        //原型练习2:将字符串反转
        String.prototype.reverse=function(){
        	var arr=this.toCharArray();
        	for (var start=0,end=arr.length-1; start <end; start++,end--) {
        	  swap(arr,start,end);
        	}
        	return arr.join();
        }
        str4="a      ab   bcd     z";
        println(str4);
        println(str4.reverse());
        /*
         * Java不允许在函数里面还有函数
         * 但是,JS却可以,因为函数是封装体,是对象,相当于内部类
         */
    </script>
    </body>
</html>
ログイン後にコピー

上記は Javascript_2_Dynamic Function_Anonymous Function_String Object_Prototype 属性の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www .php.cn) に注目してください。



ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート