JavaScript学习笔记(高级篇)

JavaScript学习笔记(高级篇)

第一章 Function对象

第一节:Function对象引入

Function是js的方法对象,可以用Function实例化出任何js方法对象;

 

第二节:用Function创建方法对象

var sayFunc=new Function("name","age","alert(name+'今年'+age+'岁了')");

 sayFunc("李四",4);

 

第三节:Function对象属性

var sayFunc=new Function("name","age","alert(name+'今年'+age+'岁了')");

alert("sayFunc方法对象的方法参数个数:"+sayFunc.length);

JavaScript学习笔记(高级篇)

第四节:Function对象方法

var sayFunc=new Function("name","age","alert(name+'今年'+age+'岁了')");

 alert(sayFunc.toString());

 alert(sayFunc.valueOf());

JavaScript学习笔记(高级篇)

 

 

第二章 JavaScript闭包

第一节:Js变量的作用域

局部变量;

<script type="text/javascript">

    function func(){

       var a=22;  //局部

       alert(a);

    }

    func();

</script>

 

全局变量;

<script type="text/javascript">

    var a=22;  //全局

    function func(){

       alert(a);

    }

    func();

</script>

第二节:从外部读取方法内部的局部变量

<script type="text/javascript">

    function func(){

       var a=22;  //局部变量

       //闭包

       function func2(){

           return a;

       }

       return func2; //注意没有()

    }

    var result=func();

    alert("访问func的私有局部变量a:"+result()); 

</script>

 

第三节:闭包的概念

各种专业文献上的“闭包”(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

 

第四节:闭包的用途

一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

 

第五节:闭包的使用注意点

1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(PublicMethod),把内部变量当作它的私有属性(privatevalue),这时一定要小心,不要随便改变父函数内部变量的值。

 

第三章 JavaScript面向对象实现

 

第1节 面向对象三大特征

封装、继承、多态

 

第2节 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>

对象属性定义:私有属性;对象属性;类属性;

<script type="text/javascript">

    function C(){

       this.objPro="对象属性";

       C.prototype.objPro2="对象属性2";

       var privatePro="私有属性";

    }

    C.classPro="类属性";

   

    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();

       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>

 

第3节 JavaScript实现封装特性

 

第4节 JavaScript实现继承特性

apply() 实现属性和方法的继承;

<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]); //继承属性和方法,没继承Animal类型

    }

    var jack=new Dog("jack",1); //jackDog类型

    alert(jack.name);

    alert(jack.age);

    jack.shout();

    jack.action();

</script>

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("会吃");

       };

    }

    function Dog(name,age){

       Animal.apply(this, [name,age]);

    }

    Dog.prototype=new Animal(); //继承Animal原型 

    var jack=new Dog("jack",1); //JackAnimal类型

    alert(jack.name);

    alert(jack.age);

    jack.shout();

    jack.action();

</script>

 

第5节 JavaScript实现多态特性

<script type="text/javascript">

    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>

 

 

2019.05.08 高级篇。完。