本章学习内容:

1.数组的使用

2.类和对象细节.

3.this关键字的使用

4.构造函数,成员函数的使用

1.数组的使用

  在任何的语言中,必须要有的就是数组了,有了数组,使得很多操作都变得非常的方便。。JS里面也是包含着

数组的,JS里的数组和JAVA里的数组在用法上基本相同,只是自己多了些特性。。。。下面来看一段代码。。。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript" type="text/javascript">
//第一种创建方式
var array=new Array();
//var array=new Array(2);
array[0]=1;
array[1]="ab";
array[2]="ac";
//array[3]="ss";
for(var i=0;i<arr.length;i++)
{
document.write(array[i]);
}
//第二种创建方式
var array1=("java","c++","python");
for(var i=0;i<arr.length;i++)
{
document.write(array1[i]);
} </script> </head> <body>
</body>
</html>

  上述涉及的只是数组的创建。。数组的创建可以有两种方式,其实上述注释部分,也是创建数组的方法。。

区别在于,注释部分直接给出了数组的初始长度为3,但是我们知道JS是动态的语言,就算是我们指定了数组

的初始长度,当我们存储的数据大于其长度的时候,JS仍然会动态的开辟新的地址空间,并不像java那样,

一旦指定了数组的长度,那就不允许越界。。。

  相关数组的常用方法

1.concat(Array1.conact(array2,array3))合并两个或者多个数组。。

2.length()取数组的长度

3.toString()把字符串转化为数组,并返回结果

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript" type="text/javascript">
//第一种创建方式
var array=new Array();
//var array=new Array(2);
array[0]=1;
array[1]="ab";
array[2]="ac";
document.writeln(array.toString());//转化为字符串
var array1=new Array("java","c++","python");
document.writeln(array.concat(array1));//合并两个数组
document.write(array.length);
for(var i=0;i<array.length;i++)//取length长度
{
document.write(array[i]);
} </script> </head> <body>
</body>
</html>

  上面使用三种方法,这里只是简单的介绍了几个常用方法,后续还会说到数组的其他方法。。。我们可以

看到,在合并了两个数组之后,两个数组的length并没有增加,并不是合并后数组的长度就会改变。。。。

2.类和对象细节:

  JS中也是有类和对象的。。。

<script language="javascript" type="text/javascript">
person=new Object();//新建对象,并为对象添加属性
person.firstname="Bill";
person.lastname="Gates";
person.age=56;
person.eyecolor="blue";
//第二种建立方式...定义一个构造函数
function person1(firstname,lastname,age,eyecolor)
{
var name="ss";//私有的..
this.firstname=firstname;//公有的
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.show=function()//公有函数
{
window.alert("...");
}
}
per=new person1("tom","john",25,"yellow");
document.writeln(per.firstname+" "+per.lastname+" "+per.age+" "+per.eyecolor); </script>

  很简单的实现了对象的创建...在建立了对象之后,我们可以直接为对象添加属性.也可以建立对象

调用类方法。。我们可以看到,在JS中只有公有和私有两种权限,并且公有的成员或函数使用this关

键字来实现的。

  补充个知识点。对象引用

<script language="javascript" type="text/javascript">
function person(){}
var a=new person();
a.name="小明";
a.age="10";
var b=a;
b.name="小白";
//此时对象的引用次数为2
window.alert(a.age+" "+a.name);//小白 10
window.alert(b.age+" "+b.name);//小白 10
b=null;//对象的引用次数为1
window.alert(a.age+" "+a.name);//小白 10
window.alert(b.age+" "+b.name);//undefined undefined
a=null;//对象的引用次数为0(gc就启动了回收机制)
</script>

上面涉及的就是对象的引用。。。对象的引用就涉及到了一个GC(对象回收机制)。。a和b都指向了同一个地址。。

这个地址在一个堆区中,堆区保存了这个对象的所有属性。。GC会根据对象的调用的次数来判断是否回收对象。。

3.this关键字

为了在建立对象的时候避免每次都为对象分配变量。。。因此使用this关键字。。。

<script language="javascript" type="text/javascript">
function person()
{
this.name="abc";
//var name="sss";
this.age="10";
}
var p1=new person();
var p2=new person();
p2.name="ss";//改变了p2的值不会影响到p1
document.write(p1.name+" "+p2.name);
</script>

 这样就在每次建立对象的时候实现了对象的初始化。。。并且this关键字的使用使得person中的成员编程公有的。。我们

可以在外部进行访问。。。在外部其实也是可以访问私有成员的。。我们只需要在person内部中定义一个this的公有函数,

然后在内部调用函数,我们就可以访问其中的私有成员了。。

总而言之一句话就是:哪个对象实例调用this所在的函数,那么this就代表哪个对象。。

<script language="javascript" type="text/javascript">
function test()//函数默认为window对象
{
alert(this.v);
}
var v=90;
test();//输出90
</script>

上面代码输出结果为90.那么调用了test()<==>window.test(),就代表调用了window对象。。this.v就代表window.v<==>var v。。

注意:this只能在类中使用。。不能在外部使用。。。

4.构造函数以及成员函数

<!DOCTYPE html>
<html>
<head>
<B>CONSTRUCTOR AND PROTOTYPE<br><br></B>
</head>
<body>
<script type = "text/javascript">
/*************************CONSTRUCTOR**********************/
var Person = function(name){
this.name = name;
}; var Person = function(name, age){
this.name = name;
this.age = age;
}; /*************************PROTOTYPE************************/ Person.prototype.getName = function(){ //member function: getName();
return this.name;
}; Person.prototype.getAge = function(){ //member function: getAge();
return this.age;
}; /********************TEST**********************************/ var person1 = new Person("John"); // use constructor 1 @param: name var person2 = new Person("Peter",2); // use constructor 2 @param: name, age document.write("person1=>name: " + person1.getName() + ", Person1=>age: " + person1.getAge() + "<br>"); document.write("Person2=>name: " + person2.getName() + ", Person2=>age: " + person2.getAge() + "<br>"); </script>
</body> </html> 其中prototype部分形式还可以是, /*************************PROTOTYPE************************/
Person.prototype = new Object({
getName: function(){
return this.name;
},
getAge: function(){
return this.age;
}
});

  

  

  

  

JavaScript 学习笔记(三)的更多相关文章

  1. Javascript学习笔记三——操作DOM(二)

    Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...

  2. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  3. JavaScript学习笔记(三十八) 复制属性继承

    复制属性继承(Inheritance by Copying Properties) 让我们看一下另一个继承模式—复制属性继承(inheritance by copying properties).在这 ...

  4. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  5. JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

    JavaScript:学习笔记(7)——VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...

  6. Java程序猿JavaScript学习笔记(14——扩大jQuery UI)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  7. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  8. Java程序猿的JavaScript学习笔记(1——理念)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  9. JavaScript:学习笔记(8)——对象扩展运算符

    JavaScript:学习笔记(8)——扩展运算符 对象的扩展运算符 扩展运算符是三个点(...).用于取出参数对象的所有可遍历属性,然后拷贝到当前对象之中. 如上图所示,新建了一个对象a,然后通过扩 ...

  10. JavaScript:学习笔记(4)——This关键字

    JavaScript:学习笔记(4)——This关键字 以前这篇帖子是关于闭包的,但是我想弄明白的其实是This关键字.JavaScript的this和Java等面向对象语言中的this大不一样,bi ...

随机推荐

  1. C语言中续行符“\”说明

    把一个预处理指示写成多行要用“\”续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成. 而把C代码写成多行则不必使用续行符,因为换行在C代码中只不过是一种空白字符,在做语法解析时所有空白字符都 ...

  2. 零基础学python》(第二版)

    ---恢复内容开始--- 零基础学python>(第二版) python学习手册 可以离线下载,  .chn格式, 插入小幽默笑话,在学习累的时候看看笑话 放松一下 欢迎下载转载,请注明出处,谢 ...

  3. Spring 中属性配置

    1 注册自定义属性编辑器,方法一.使用BeanFactory, 则用户需要手动调用 registerCustomEditor(Class requiredType, PropertyEditor pr ...

  4. django 在建模时的一个手贱

    最近在写一个网站,在建立model的时候遇到了一些问题,最后找了好久才找到为什么. 一.django的model定义如下: from django.db import models # Create ...

  5. iOS中使用block传值

    转自:http://blog.sina.com.cn/s/blog_60b45f230100yiaf.html 用此方法传值可以替代委托了.具体例子: MainView.h #import <U ...

  6. cocos2d-x JsonBox 读写

    #include "JsonBox.h" std::string path = "test.json”; //注意引入路径 path = cocos2d::CCFileU ...

  7. posix多线程--互斥量

    多线程程序在线程间共享数据时,如果多个线程同时访问共享数据就可能有问题.互斥量是解决多个线程间共享数据的方法之一. 1.互斥量初始化两种方式:(1)静态初始化 #include <pthread ...

  8. python(25):Unicode 转成中文

    代码转换如下: if __name__ == "__main__": data = "\u5c71\u5cb3\u548c\u4e00\u5207\u4e18\u9675 ...

  9. 基于python的直播间接口测试实战 详解结合项目

    基于python的直播间接口测试详解 一.基本用例内容描述 以设置白名单 /advisor/setUserWhiteList.do接口为例,该方法为POST at first,先要导入一些常用到的模块 ...

  10. ADO.NET 连接方式进行数据库访问

    转自:http://www.cnblogs.com/oneword/archive/2010/09/10/1823414.html 连接到数据源 连接到数据源需要使用两步: 1.创建连接字符串 2.使 ...