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);
第四节:Function对象方法
var sayFunc=new Function("name","age","alert(name+'今年'+age+'岁了')");
alert(sayFunc.toString());
alert(sayFunc.valueOf());
第二章 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); //jack是Dog类型
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); //Jack是Animal类型
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 高级篇。完。