传智播客 韩顺平 轻松搞定网页设计(html+css+javascript) 之javascript.doc_第1页
传智播客 韩顺平 轻松搞定网页设计(html+css+javascript) 之javascript.doc_第2页
传智播客 韩顺平 轻松搞定网页设计(html+css+javascript) 之javascript.doc_第3页
传智播客 韩顺平 轻松搞定网页设计(html+css+javascript) 之javascript.doc_第4页
传智播客 韩顺平 轻松搞定网页设计(html+css+javascript) 之javascript.doc_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Javascript的基本介绍 JS是用于WEB开发的脚本语言: 脚本语言是什么: 脚本语言不能独立使用,它和HTML/JSP/PHP/ASP.NET配合使用 脚本语言也有自己的变量,函数,控制语句(顺序,分支,循环) 脚本语言实际上是解释性语言(即在执行时直接对源码进行执行) Java程序.java.classjvm , js浏览器(js引擎来解释执行) Js在客户端(浏览器)执行 因为js是由浏览器来执行的,因此这里有个问题,不同类型的浏览器可能对js的支持不一样。 function test()window.alert(hello world!); New Document 案例:1需求:打开网页后,显示hello ! window.alert(hello!); New Document 问题: js的位置可以随意放 js必须使用 代码 在一个html文件中(JSP/PHP/ASP.NET)可以出现多对(script)片段,浏览器会按照先后顺序一次执行案例2:Hello world程序改进 如何定义变量: 如何运算: New Document /js中变量的定义(js中变量用var表示,无论什么类型) var num1=1; var num2=60; var result=num1+num2;window.alert(结果是+result); /alert函数 window.alert表示弹出一个对话框 Js的变量类型是怎样决定的1) Js是弱数据类型语言,即:在定义变量侍候,统一使用var表示,甚至可以去点var这个关键字2) Js中的变量的数据是由js引擎决定的Var name=”shunping”; /name是字符串Var kk=2 /kk是数字Name=234; /这事name自动变成数 Js的命名规范(函数/变量):1) 使用大小写字母,数字,$可以命名2) 不能以数字打头3) 不能使用js保留字和关键字(即java里的关键字)4) 区分大小写5) 单行注释:/6) 多行注释:/*.*/韩顺平JS第三讲 Js的数据类型: 基本数据类型 数值类型 字符串类型 布尔类型通过typeof可以看到变量的具体数据类型 举例: New Document var vi=abc; var v2=890; window.alert(v1是+typeof v1); window.alert(v2是+typeof v2);vi=456; /体现js是动态语言:即数据类型可以任意变化 window.alert(v1是+typeof v1); /体现js是动态语言 复合数据类型 数组 对象 特殊数据类型 Null 即:var=null Undefined 即:如下代码window.alert(tt ); /直接报错:未定义var tt; /未给值 Js定义变量,初始化,赋值 定义变量: 即var=a 初始化: 即在定义变量时就给值 赋值: 即:比如你先定义一个变量 var=tt ,然后再给值:tt=780; js数据类型转换: 自动转换例子:var=123; /a是数值 a=”hello” /a的类型是string 强制转换例子:字符串转换成数字Var a=123” ; a=parseInt(a); /使用系统数强制转换Var b=90 ; /b是numberb=b+”, /b就是string 运算符 + * / % %(取摸:即两个数相除的余数) 强调:取模主要用于整数之间取模例子:编写一个程序,判断两个数是否能够整除 var a=90;var b=8;if(a%b=0)window.alert(能整除);elsewindow.alert(不能整除); +, 运算符a+ = a=a+1 a- = b=b-1 +a 表示先把自己加1再赋值 -a 表示先把自己减1再赋值例子:Var a=56;Var b=+a; /b=+a等同于a=a+1;b=a b=a+等同于b=a; a=a+1; Window.alert(b);Window.alert(a); -运算符 Var a=56; Var b=-a; /b=-a等同于a=a-1;b=a b=a-等同于b=a; a=a-1; Window.alert(b); Window.alert(a);例子:编写一个程序,判断两个数是否能够整除 var a=90;var b=8;if(a%b=0)window.alert(能整除);elsewindow.alert(不能整除); +, 运算符a+ = a=a+1 a- = b=b-1 +a 表示先把自己加1再赋值 -a 表示先把自己减1再赋值例子:Var a=56;Var b=+a; /b=+a等同于a=a+1;b=a b=a+等同于b=a; a=a+1; Window.alert(b);Window.alert(a); -运算符 Var a=56; Var b=-a; /b=-a等同于a=a-1;b=a b=a-等同于b=a; a=a-1; Window.alert(b); Window.alert(a);错误案例:更正:输出: lmyfuns.js代码:调用myfuns.jsl案例一:Js文件:调用:案例2:Js文件:调用:abc(5);输出:3 3 4lJs文件:调用: 数组数组在内存中的存在形式:内存数据调用案例:输出:900内存数据分析:l输出:35 90 900内存数据调用分析:l输出: hello world abc 顺平输出: h e l l o w o r l d a b c 顺 平输出: hello world 输出:0=451=902=0gg=9000 二维数组的遍历: 输出:shunping 123 4.5a b c 优化排序: 输出:l 输出:找到 下标为4 数组转置:输出:JavaScript面向(基于)对象编程u 澄清概念 js中 基于对象=js 面向对象 js中没有类class,但是它取了一个新的名字叫原型对象。(因此类等同于原型对象。) u js面向对象特征介绍 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西机会都是对象特别说明:基于对象也好,面向对象也好,实际上都是以对象的概念来编写程序。从本质上并无区别,所以这两个概念在课程中是一样的。因为javascript中没有class(类),所以有人把类也称为原型对象。因为这两个概念在编程中发挥的作用看都市一个意思总结:JS中基于对象=JS面向对象 JS中没有类的概念,按标准的说法原型对象。其实就是类javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言。 u 一个简单的案例: 问题提出:张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年10岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。当用户输入小猫名错误,则显示张老太没有这只猫猫。 /解决方法:把猫的属性集中,创建一种新的数据类(原型对象/类) /用面向对象的方法来解决上面的问题: /这里就是一个Cat类 function Cat() /如果你这样用 /Cat();/函数 var cat1=new Cat();/类 /这时cat1就是一个对象(实例) cat1.namr=”小白”; cat1.age=3; cat1.color=”白色”; /从上面的代码我们可以看出 /1. js中的对象的属性可以动态的添加 /2.属性没有限制. u 创建对象的方式有五种 u 在js中一切都是对象 window.alert(Person.construcotr); 输出:function Function()native code 思考:如何判断一个对象实例是不是Person类型? 方法一: 方法二:u 补充说明:(带var和不带var的区别) /全局变量 var abc=89; function test() /在函数里,如果你不带var,则表示使用全局的abc变量 /如果你带上var,则表示在test()中,定义一个新的abc变量。 abc=900; test(); window.alert(abc); 若test()函数里的abc不带var,则输出900 若test()函数里的abc带var,则输出89 u 类(原型对象)与对象 创建对象实例: var 对象名=new 类名/原型对象名(); 访问(使用)对象实例的成员变量: (1) 对象实例名.属性名; (2) 对象实例名“属性名”;(该方式可以实现动态的访问变量。如下:) function Person(); var p1=new Person(); =”Sunny”; window.alert(); var kk=”Su”+”nny”; window.alert(p1kk);Js中内存释放Js还主动提供一种方法主动释放内存delect 对象名.属性名/这样就会立即释放 对象u thisu 如何定义类function 类名() this.属性名;/公开属性var 属性名;/私有属性 “this.属性名”公开属性,可以通过“对象名.属性名”来直接访问。 “var 属性名”私有属性,只能通过对象的“内部函数”来访问。 this不能放在类的外部使用(即:只能放在类内部使用),否则调用者就变成了window.u 对象-成员函数(方法) 比如:我们希望对象不但有属性,还希望他们有行为。(行为在程序中要靠函数来体现) 添加speak函数,输出 我是一个好人。 添加jisuan函数,可以计算从1+1000的结果。 修改jisuan函数,该方法可以接收一个数n,计算从1+n的结果。 function Person(name,age) =name; this.age=age; this.show=function() /this.show是公开的函数. document.writeln(名字:+); this.jisuan=function(n) var res=0; for(var i=0;in;i+) res+=i; return res; var p1=new Person(Sunny,21); p1.show(); document.write(计算结果为:+p1.jisuan(100); 给对象添加方法还有两种方式:(如下) 1) 第一种: function 类名() this.属性; var 对象名=new 类名(); function 函数名() /执行 对象名.属性名=函数名;/这样 /就相当于把函数赋给对象名.属 /性名,此时这个属性就表示一 /个函数。对象名.属性名(); 第一种案例: function Person() =”abc”; this.age=21; function show1() window.alert(“hello”+); var p1=new Person(); p1.abc=show1; p1.abc();2) 第二种: 对象名.属性名=function(参数列表) /代码 ; 调用 对象名.属性名(实际参数); 第二种案例: function Person() =”abc”;this.age=21; var p1=new Person(); p1.abc=function show1() window.alert(“hello”+); ; p1.abc();思考题:对第一种案例: 1. 如果window.alert(p1.abc)会输出什么? 2. 如果window.alert(show1)会输出什么? 都会输出: function show1()window.alert(“hello”+);3) 第三种: 前面的几种方法有有一个问题:那就每个对象 独占函数代码,这样如果对象很多,则会影响效率,js设计者,给我们提供另一个 方法 原型法:这样多个对象可以共享函数代码 代码第三种案例: function Dog() var dog1=new Dog(); Dtotype.shout=function() window.alert(“小狗); dog1.shout(); var dog2=new Dog();dog1.shout();/这里0k对代码的原理分析:&补讲=”的作用 当=的两边都是字符串,则比较内容是否相等。 当=的两边都是数字,则比较数的大小是否相等。 当=的两边都是对象或者是对象函数,则比较地址是否相等。 u 对象-Object类 Object类是所以javascript类的基类,提供了一种创建自定义对象的简单方式,不需要程序员在定义构造函数。 主要属性: constructor-对象的构造函数prototype-获得类的prototype对象,static性质 主要方法: hasOwnProperty(property)-是否属于本类定义的属性isPrototypeOf(object)-是否是指定类的prototype propertyIsEnumerable(property)-是否可例举的属性 toString-返回对象对应的字符串valueOf()-返回对象对应的原始类型值 u 加深对类和对象的认识: 如何给类添加方法(如何给某类型的所有对象添加方法)? 请思考:给js的Array对象扩展-一个find(val)方法,当一个Array对象调用该方法的时候,如果能找到val,则返回其下标,否则返回-1& Js中不支持函数的重载,具体案例 function test(a) window.alert(a); function test(a,b) window.alert(a+ +b); test(23);结论:js在调用一个函数时,是根据函数名来调用的。如果有多个函数名相同,则默认最后一个函数。u 构造函数 基本用法: function 类名(参数列表) 属性=参数值; 案例:& 在给一个对象初始化属性值的时候, 也可以指定函数属性。 案例: function calc(num1,num2,oper) if(oper=+) return num1+num2; else if(oper=-) return num1-num2; else if(oper=*) return num1*num2; else if(oper=/) return num1/num2; function Person(name,age,fun) =name; this.age=age; this.myfun=fun; var p1=new Person(aa,9,calc); window.alert(); window.alert(p1.myfun(50,60,*);构造方法(函数)小结: 构造方法名和类名相同 主要作用是完成对新对象实例的初始化 在创建对象实例时,系统自动调用该对象的构造方法。 u 创建对象的又一种方式: 如果一个对象比较简单,我们可以直接创建. var dog=name:Sunny,age:8, fun1:function()window.alert(hello,world); window.alert(dog.constructor); =输出:function Object()native codewindow.alert(+dog.age); dog.fun1(); 有时,我们会看到这样一种调用方法: 函数名.call(对象实例);/这样调用,该函数的this就只是对象实例。u 面向(基于)对象编程进一步认识-(for.in) var dog=name:小明,sayHello:function(a,b)window.alert(结果是=+(a+b);/循环列出dog对象的所有属性和方法 for(var key in dog) window.alert(dogkey); /循环列出window对象的所有属性和方法u javaScript面向对象编程的三大特性 封装 Js提供有以下几种控制方法和属性的访问权限: F 公开级别:对外公开 F 私有级别:类本身可以访问,不对外公开. 案例:& 我们前面学习过,通过prototype给所有的对象添加方法,但是这种方式,不能去访问类的私有变量和方法 案例: function Person() =abc; var age=90; this.abc=function() window.alert(abc); function abc2() window.alert(abc2); Ptotype.fun1=function() window.alert();/ok this.abc(); /abc2();/no ok /window.alert(age);/no ok var p1=new Person(); p1.fun1(); fun1();/no oku u prototype的思考: 继承 (1) 为什么需要继承 问题: 解决方法如下:特别说明: 通过对象冒充,js可以实现多重继承的效果。(用的少) Object类是js所以类的基类。js的重载和重写 重载:js中不支持重载(即,不可以通过参数的个数 来决定调用哪个函数),但是因为js本身支持可变参数,所以,可以看成天然支持重载 重写:子类可以重新写函数,来覆盖父类的某个方法. 多态 js实际是无态的,是一种动态语言,一个变量的类型是在运行的过程中由js引擎来决定的,所以说js天生就支持多态。u 补充讲解闭包(闭包gc) 解释:1) 闭包和gc是相关的 2) 闭包实际上是涉及到一个对象的属性,何时被gc的处理的问题 3) 怎样才能对对象的属性形成一个闭包 /*closure*/ function A() var i=0; function b() window.alert(i+); return b; A();/此时内存中i空间被gc处理 var c=A();/这种用法,gc不会把i当作垃圾 c();/输出0c();/输出1,从而证明i变量被闭包 u js的内部类 javascript中本身有提供一些,可以直接使用的类就是内部类,主要有:Object/Array/Math/Boolean/String/RegExp/ Date/Number u 内部类分类 从使用的方式看,分为静态类和动态类 静态类 使用 类名.属性|方法 比如 Math.abc(-12) 动态类 使用 var对象=new 动态类() 对象.属性|方法 比如:var nowdate=new Date();/显示当前的日期 window.alert(nowdate.toLocaleString(); n Object类(在前面有介绍) n n Math类 1) abs(x) 返回数的绝对值 2)ceil(x) 对一个数进行上舍入 比如:alert(Math.ceil(4.5);/5 3) floor(x) 对一个数进行下舍入 比如:alert(Math.floor(4.5);/4 4) max(x,y) 求x,y中较大的数5) mix(x,y) 求x,y中较小的数 6) round(x) 对x进行四舍五入 比如:alert(Math.round(4.77);/5 7) random() 一个大于0小于1的16位小数位的数字 比如:alert(Math.round(Math.random()*100);n Date类 1) Date() 返回当前日期和时间 2) getDate() 从Date对象返回一个月中的某一天(1 31) 3) getDay() 从Date对象返回一周中的某一天 (0 6) 4) getMonth() 从Date对象返回月份(0 11) 5) getFullYear() 从Date对象返回年(不推荐使用getYear()) 6) getHours() 从Date对象返回小时数(0 23) 7) getMinutes() 从Date对象返回分钟(0 59) 8) getSeconds() 从Date对象那个返回秒(0 59)/6:00-9:00上午好/17:31-18:40傍晚好 function showHello(date) var hour=date.getHours(); var minute=date.getMinutes(); /思路:把当前时间转换成0:0的秒数(小时数) var mysecond=hour*3600+minute*60; if(mysecond=6*3600&mysecond=17*3600+31*60&mysecond=18*3600+40*60) window.alert(傍晚好); var date=new Date(); showHello(date);n String类 1) indexOf 返回某个字符串值在该字符串中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论