Javascript笔记(高级)

来源:互联网 发布:关口知宏2017来中国 编辑:程序博客网 时间:2024/06/05 06:04
/*------------------------------------第一章 Function对象---------------------------------*/
//1.Function  对象引入
Function是js的方法对象,可以用Function实例化出任何js方法对象;
<script>
function say(name,age){
alert(name+"今年"+age+"岁了");
}
say("张三",3); 
</script>

//2.用Function创建方法对象
<script>
//证明js中函数是方法对象
var sayFunc = new Function("name","age","alert(name+'今年'+age+'岁了')");
sayFunc("lisi","13");
</script>

//3.Function对象属性
<script>
var sayFunc = new Function("name","age","alert(name+'今年'+age+'岁了')");
//sayFunc("lisi","13");
//类似java有一个Object类作为根类,所以也有从根类继承的方法
alert("sayFunc方法对象的属性个数:"+ sayFunc.length);
</script>

//4.Function对象方法
document.write(sayFunc.toString());//显示源码
document.write(sayFunc.valueOf());//显示源码

/*------------------------------------第二章 JavaScript闭包---------------------------------*/
//1.Js变量的作用域
在函数中,不用 var 定义就是全局变量。

//2.从外部读取方法内部的局部变量
要想从外部读取方法内部的局部变量的话,就要在该方法内部定义一个可以获取局部变量的函数,然后在外部调用该函数。

<script>
function func(){
a = 22;
}
func();//要先调用函数去定义a这个全局变量
alert(a);
</script>

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

<script>
function func(){
var a = 22;

function func2(){
return a;
}

return func2;
}
var result = func();
alert("访问func的私有局部变量a:"+result());
</script>


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

//5.闭包的使用注意点
1) 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性
能问题,在 IE 中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2) 闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包
当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随
便改变父函数内部变量的值。


/*------------------------------------第三章 JavaScript面向对象实现---------------------------------*/
//1.面向对象三大特征
1. 封装
2. 继承
3. 多态
详情:http://blog.csdn.net/hbsxjs/article/details/54988484

//2.JavaScript自定义对象
创建对象方式:
// 方式一:对象初始化器方式
<script>
//创建对象方式:方式一
var marry = {
name : "marry",
age : 2,
shout : function() {
alert("我是:" + this.name + ",年龄:" + this.age);
},
action : function() {
alert("会吃");
}
};
alert(marry.name);
alert(marry.age);
marry.action();
marry.shout(); 
</script>


// 方式二:构造函数方式
<script>
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);
jack.shout();
jack.action();
</script>

对象属性定义: 私有属性;
对象属性; 类属性;
对象方法定义: 私有方法;
对象方法; 类方法;
<script>
function C(){
this.objPro1="对象属性1";
C.prototype.objPro2="对象属性2";//也可以用原型定义对象属性
var privatePro="私有属性";
}

C.classPro="类属性";
alert(C.classPro);

var c = new C();
alert(c.objPro1);
alert(c.objPro2);
</script>


//3.JavaScript实现封装特性
<script>
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>

//4.JavaScript实现继承特性
Apply() 实现属性和方法的继承:
<script>
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的属性、方法给Dog用
}

var jack = new Dog("jack",1);
alert(jack.name);
alert(jack.age);
jack.shout();
jack.action();
</script>


Prototype 实现原型的继承;

//5.JavaScript实现多态特性
http://blog.csdn.net/likendsl/article/details/53582320







阅读全文
0 0