[150823]Js学习笔记

1、Function对象 与其内置的属性。


<script type="text/javascript">

//1、函数的一般创建方法

/*     function say (name,age) {
        this.name=name;
        this.age=age;
        alert("she is " + name + " and age is " + age);
    }
    say("lilyth",8); */
    
    //2、※※※※※※用函数对象的方法new 一个Fuction对象
    var funcObject = new Function ("name","age","alert('she is ' + name + ' and age is ' + age)");
    funcObject("adom",8);
    
</script>


2、Js闭包「closure」的概念及应用。

<script type="text/javascript">
    function test () {
        a = 22;
        var name= "hello";
        
        //闭包是一个函数 内部的接口,这个接口提供 「外部」访问「该函数内部」的「私有变量」的方法。
        function closure () {
            return name;
        }
        
        //返回一个可以被执行的函数对象,在后面加上“()”便可以执行该函数。
        return closure;
    }
    
    //在函数外边调用该私有变量的方法。这是一个「单例工厂设计模式」的体现,※※※内部的变量由内部的接口定义由外边使用※※※。
    //alert("私有变量name=" + test()());

    //除了在一般的函数对象使用闭包以外,还能在基于原型「prototype」的对象中使用
    var object={
            name:"对象里面的变量",
            getFunc:function () {
                //对象里面的函数(or「方法」)的私有变量,本来不能被外界访问。
                var v = 20;
                //对象里面的方法闭包接口,提供内部方法的私有变量的访问权限。
                function getPri() {
                    return v;
                };
                //对象函数提供的闭包接口
                return getPri;
            }
        //访问对象方法里面的函数私有变量
    
    };
    alert("访问对象方法里面的函数私有变量: " + object.getFunc()());
    
</script>



3、Js对象的创建方法,Js模拟java中「类」的实现。

<script type="text/javascript">
    //定义「对象」(不是类,是对象)的方法:直接定义法
    var girl= {
        name:"lilyth",            
        age:8,
        say:function () {
            alert("我是" + this.name + "我" + this.age + "岁了哦" );
        },
        can:function () {
            alert("我会吃");
        }
    };
    //girl已经是一个「实体」。
    girl.say();
    girl.can();
    
    //函数(类)定义对象的方法:函数构造定义法。与java的(类到具体对象的)构造方法差不多。
    //该函数可以定义多个不同的对象,所以这就在js中模拟了「类」的概念。
    function boy (name,age) {
        this.name=name;
        this.age=age;
        this.say=function () {
            alert("我是" + this.name + "我" + this.age + "岁了哦" );
        };
        this.can=function () {
            alert("我会吃");
        };
    }
    //用构造函数定义对象。
    var b = new boy("adom",8);
    b.say();
    b.can();
</script>

4、Js类字段的分类 与 方法的分类。

<script type="text/javascript">
	//Js类的字段(属性)分类:1、对象字段 2、私有字段 3、类字段
	function A () {
		//对象字段定义方法1
		this.field1="对象字段一";
		//对象字段定义方法2:用原型定义
		A.prototype.field2="对象字段二";
		//私有字段定义方法
		var field3="私有字段三";
	}
	//Js类字段定义方法
	A.field4="类字段四";
	
	var a = new A ();
	
	//测试
	alert(a.field1);
	alert(a.field2);
	/* alert(a.field3); 私有字段可以通过闭包获得。*/ 
	alert(A.field4);
	
	//Js类的方法分类:1、对象方法 2、私有方法 3、类方法
	function B () {
		//对象方法定义方法1
		this.fun1=function () {
			alert("对象方法一");
		};
		//对象方法定义方法2:用原型定义
		B.prototype.fun2=function () {
			alert("对象方法二");
		}
		
		//私有方法定义(一般情况下无法被外界访问)
		var privatefun=function () {
			alert("私有方法");
		}
	}
	//类方法定义
	B.classFun=function () {
		alert("类方法");
	}
	
	//Test
	var b = new B ();
	b.fun1();
	b.fun2()
	//b.privatefun(); 执行时Firebug提示TypeError: b.privatefun is not a function
	B.classFun();
	
</script>

5、Js继承与多态的「模拟实现」。

PS:用apply()方法与 prototype实现 Js的继承与多态。

继承的实现:

	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();
	
	var jack=new Dog("jack",1);
	alert(jack.name);
	alert(jack.age);
	jack.shout();
	jack.action();

多态的实现:

<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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值