您的位置:首页 > Web前端 > JavaScript

黑马程序员--javascript学习笔记(2)

2013-06-13 10:39 190 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流!
----------------------

三、数组

u  一维数组

1、基本用法

var 数组名=[元素值,……];元素的值可以是任意类型!

例:var   arr=[4,56,”hello”,true];

2、Js中的数组是引用传递

如果角标越界返回undefine

3、js的数组可以动态增长,因此数组大小可以不用事先制定。

例:

var  a=[2,3];

window.alert(a.length);//2

a[2]=56;

window.alert(a.length);//3

alert(a[2]);

4、字符串的split()方法:用于把一个字符串分割成字符串数组。

返回值为一个字符串数组。

例:

<script type="text/javascript">
 
var str="How are you doing today?"
 
document.write(str.split(" ") + "<br />")
document.write(str.split("") + "<br />")
document.write(str.split(" ",3))
 
</script>

5、遍历一维数组

可以使用for循环和while循环。还可以使用for循环如下形式:

arr=[45,90,0];

arr[‘gg’]=900;//数组下标可以用字串表示

for(var key  in arr){

  window.alert(key+”=”+arr[key]);

}

u  多维数组

二维数组

例:

var arr=[[“shanghai”,123,3],

[‘a’,’b’,’c’],

[90,0]];

//转置

var arr=[[2,4,6,8],[9,8,7,3],[9,6,5,1]];

var arr2=[];

for (var i=0;i<arr[0].length ;i++ )

{

  arr2[i]=[];

}

for (var i=0;i<arr.length ;i++ )

{

      for(var j=0;j<arr[i].length ;j++ )

      {

        arr2[j][i]=arr[i][j];

      }

}

 

for (var i=0;i<arr2.length ;i++ )

{

      for(var j=0;j<arr2[i].length ;j++ )

      {

             document.writeln(arr2[i][j]+" ");

      }

      document.writeln("<br>");

}

排序

 

四、js面向(基于)对象编程

Javascript是一种基于对象的语言。

Js中没有类(class),把类称为原型对象,因为两个概念在编程中的作用一样,都是一个意思。

例:

//创建原型对象\类

//cat类

function Cat(){

}

Cat();//函数

var cat1=new Cat();//cat1就是一个对象(实例)

cat1.name="小白";

cat1.age=3;

cat1.color="白色";//js中的对象的属性可以动态的添加

                           //属性没有限制

 

window.alert(cat1.name+cat1.age+cat1.color);

 

u  类(原型对象)和对象的区别和联系

    (1)类是抽象的概念,代表一类事物

(2)对象是具体的,代表一个实体

(3)对象是以类(原型对象)为模板创建的

 

u  创建对象的方式有五种

1、工厂方法

2、使用构造函数来定义类

3、使用prototype

4、构造函数及原型混合模式

5、动态原型模式

 

u  构造函数定义类(原型对象)

基本语法

function 类名(){

 

}

Js中一切都是对象!

例:

function Person(){}

var a =new Person();

window.alert(a.constructor); //a对象实例的构造函数

window.alert(typeof a);//a 的类型是什么

 

var  b=”1234”;

window.alert(b.constructor);

window.alert(typeof  b);

 

如何判断某个对象是不是某个类型

function Person(){}

var a= new Person();

// 思考:如何判断一个对象实例是不是Person类

if (a instanceof Person)

{

       window.alert("OK");

}

if (a.constructor==Person)

{

       window.alert("OK2");

}

 

补充知识点:

var abc=98;//全局变量

 

function test(){

    //再函数里,如果不带var
则表示全局的abc变量

       //如果带var
则表示重新定义一个新的变量 --在不同的栈里

       abc=900;

}

 

u  访问成员变量的方法

1、对象实例名.属性名;

2、对象实例名[“属性名”];

 

对象引用问题的说明

function Person(){}

var a= new Person();

a.age=10;

a.name="小明"

var b=a;

b.name="小白";

window.alert(b.age+b.name+"min"+a.name);

b=null;

window.alert(b.age+b.name+"min"+a.name);//出错

 

对象回收机制(gc)

 

Js还提供一种方式,主动释放对象内存。

 

delete  对象名.属性;//删除a对象的属性

u  this

当创建一个对象后就希望该对象自动的拥有某些属性!

Function Person(){

 

}

 

function Person(){

        this.name="abc" //公开属性

       this.age=90;

       varna="ddd";   //这个属性是私有的 
不能访问

 //这个方法是公开的(特权方法)

       this.show=function(){  

         window.alert(this.name+this.age);

         show2();

       }

       //这个方法是私有的 
不能调用

       functionshow2(){     

        window.alert(na);

       }

}

var p1= new Person();

p1.show();

var p2= new Person();

window.alert(p1.name+"  "+p2.name);

 

记住:哪个对象实例调用this所在的函数,那么this就代表哪个对象实例。

 

注意:this不能放在类的外部使用,否则调用者将发生变化。

例:

function test1(){

 window.alert(this.v);

}

var v=90;

window.test1();

test1();

 

l  给对象添加指定函数的几种方式

第一种:

对象名.属性名=函数名;//相当于把函数赋给对象名.属性名

调用:对象名.属性名();

例:

function Person(){

      this.name="name";

      this.age=90;

}

function show1(){  

        window.alert(this.name+this.age);

      }

var p1=new Person();

//把show函数给p1.abc

p1.abc=show1;

//p1.abc=show1();把函数值给p1.abc

p1.abc();

 

第二种

对象名.属性名=function
函数名 (){

代码;

}

调用:对象名.属性名(参数列表);

例:

function Person(){

      this.name="name";

      this.age=90;

}

 

var p1=new Person();

//把show函数给p1.abc 
方法被p1独占

p1.abc=function show1(){  

        window.alert(this.name+this.age);

      };

p1.abc();

 

第三种:

前面几种方法,每建立一个对象都独占函数代码,如果对象多久会影响效率。Js提供了另一种方法:原型法(prototype)

例:

function Dog(){}

//使用prototype[类]
去绑定一个函数

Dog.prototype.show=function(){

      window.alert('小狗');

}

var dog1=new Dog()

dog1.show();

var dog2=new Dog()

dog2.show();

 

补充:==的作用

1、当==的两边都是字符串的时候,则比较内容是否相当。

2、当==两边是数字,则比较大小是否相等。

3、当==两边是对象或者是对象函数,则比较地址是否相等。

 

 

 

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流!
----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息