JavaScript(高级篇)
第一章 Function对象
第一节:Function对象引入
Function 是 js 的方法对象,可以用 Function 实例化出任何 js 方法对象;
第二节:用 Function创建方法对象
第三节:Function对象属性
第四节:Function对象方法

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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>Insert title here</title> </head> <body> <script type="text/javascript"> var sayFunc=new Function("name","age","alert(name+'今年'+age+'岁了')");//前面都是参数,最后一个是方法体。 // sayFunc("李四",4); // alert("sayFunc方法对象的方法参数个数:"+sayFunc.length); alert(sayFunc.toString()); //显示内部匿名方法的源码 alert(sayFunc.valueOf()); //显示内部匿名方法的源码 </script> </body> </html>
第二章 JavaScript闭包
第一节:Js变量的作用域
第二节:从外部读取方法内部的局部变量
第三节:闭包的概念
各种专业文献上的“闭包” (closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部
变量的函数。
由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个
函数内部的函数” 。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
第四节:闭包的用途
一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
第五节:闭包的使用注意点
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性
能问题,在 IE 中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包
当作它的公用方法(Public Method) ,把内部变量当作它的私有属性(private value) ,这时一定要小心,不要随
便改变父函数内部变量的值。

<script type="text/javascript"> var a=22; //全局变量 function func(){ alert(a); } func(); </script> ------------------------------------------------------------ <script type="text/javascript"> function func(){ // var a=22; //局部变量 a=22; //去掉var,就是全局变量 } func(); alert(a); </script> ------------------------------------------------------------------- <script type="text/javascript"> function func(){ var a=22; /* 通过闭包能访问私有变量,相当于一个对外接口 , 因为父函数没有销毁,这些变量的值始终保持在内存中。 */ function func2(){ return a; } return func2; } var result=func(); alert("访问func的私有局部变量a:"+result()); </script> ----------------------------------------------------------------------- <script type="text/javascript"> var name="The Window"; var object={ name:"My object", getNameFunc:function(){ return function(){ return this.name; }; } }; //alert(object.name); alert(object.getNameFunc()()); //结果是The Window, this指widow对象,因为object.getNameFunc()返回的的是 // function(){return this.name;}; </script>
第三章 JavaScript面向对象实现
第一节:面向对象三大特征
第二节:JavaScript自定义对象
创建对象方式:方式一,对象初始化器方式;方式二,构造函数方式;
对象属性定义:私有属性;对象属性;类属性;
对象方法定义:私有方法;对象方法;类方法;

<script type="text/javascript"> //方式一,对象初始化器方式 var marry={ name:"marry", age:2, shout:function(){ alert("我是:"+this.name+",今年:"+this.age); }, action:function(){ alert("会吃"); } }; alert(marry.name); alert(marry.age); marry.shout(); marry.action(); //方式二,构造函数方式; function Dog(name,age){ this.name=name; this.age=age; this.shout=function(){ alert("我是:"+this.name+",今年:"+this.age); }; this.action=function(){ alert("会吃"); }; } var jack=new Dog("jack",1); alert(jack.name); alert(jack.age); jack.shout(); jack.action(); </script> </body> </html> -------------------------------------------------------------------------- <script type="text/javascript"> function C(){ this.objPro="对象属性"; C.prototype.objPro2="对象属性2"; //使用原型定义属性 var privatePro="私有属性"; } C.classPro="类属性"; //像java中的static 属性 alert(C.classPro); var c=new C(); alert(c.objPro); alert(c.objPro2); </script> -------------------------------------------------------------------------- <script type="text/javascript"> function C(){ var privateFunc=function(){ alert("私有方法"); }; privateFunc(); // new对象的时候在内部调用 this.objFunc=function(){ alert("对象方法"); }; C.prototype.objFunc2=function(){ alert("对象方法2"); }; } C.classFunc=function(){ alert("类方法"); }; C.classFunc(); var c=new C(); c.objFunc(); c.objFunc2(); </script>
第三节:JavaScript实现封装特性
第四节:JavaScript实现继承特性
Apply() 实现属性和方法的继承;
Prototype 实现原型的继承;

<script type="text/javascript"> function Animal(name,age){ this.name=name; this.age=age; this.shout=function(){ alert("我是:"+this.name+",今年:"+this.age); }; this.action=function(){ alert("会吃"); }; } //Apply() 实现属性和方法的继承;调用父类的方法和属性。 function Dog(name,age){ Animal.apply(this, [name,age]); } var jack=new Dog("jack",1);//jack原型还是dog alert(jack.name); alert(jack.age); jack.shout(); jack.action(); </script> -------------------------------------------------------------------------- <script type="text/javascript"> function Animal(name,age){ this.name=name; this.age=age; this.shout=function(){ alert("我是:"+this.name+",今年:"+this.age); }; this.action=function(){ alert("会吃"); }; } function Dog(name,age){ Animal.apply(this, [name,age]); } Dog.prototype=new Animal(); //Prototype 实现原型的继承; var jack=new Dog("jack",1);//jack原型 是animal alert(jack.name); alert(jack.age); jack.shout(); jack.action(); </script>
第五节:JavaScript实现多态特性

<script type="text/javascript"> //JS 模拟多态,子类是什么类型就调用相应类型的方法。 function Animal(){ this.say=function(){ alert("我是动物"); }; } function Dog(){ this.say=function(){ alert("我是狗"); }; } Dog.prototype=new Animal(); function Cat(){ this.say=function(){ alert("我是猫"); }; } Cat.prototype=new Animal(); function say(animal){ if(animal instanceof Animal){ animal.say(); } } var dog=new Dog(); var cat=new Cat(); say(dog); say(cat); </script>