JavaScript中模拟类的定义

1. 定义类并创建类的实例对象

2. 定义公有属性和私有属性

3. 定义公有方法和私有方法

4. 静态属性和静态方法

5. 构造函数(无参,有参)

6. 原型方式声明属性与方法

7. 直接用Object或函数对象加属性与方法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<meta http-equiv="content-Type" content="text/html; charset=utf-8"/>
<head>
    <title>类的模拟</title>
</head>
<body>
<!--
//------------------1.私有属性------------------------------------------------------------------
	//1.用var声明,不能通过对象名去访问
//------------------2.公有属性------------------------------------------------------------------
	//1.公有属性用this声明
//------------------3.私有方法与公有方法---------------------------------------------------------
	//1.私有的用var声明,公有的用this声明  ,可以同名(可以用公有调用私有)
//------------------4.静态属性与静态方法----------------------------------------------------------
	//类名.属性名或方法名定义
	//访问也是类名.属性名或方法名
	//不能用对象调用
//------------------5.构造方法------------------------------------------------------------------
	//1.无参构造
	//2.有参构造
//------------------6.原型方式声明属性与方法-------------------------------------------------------
	//1.直接原型声明属性和方法
	//2.为引用类型赋值出问题?
	//3.有参构造与原型结合一起用!
//------------------7.直接用Object对象或函数对象加属性与方法-----------------------------------------
	//1.直接用Object对象,再去定义属性和方法
	//2.先定义函数对象,再去定义属性和方法
	//3.json对象方式
	//--------------------4.静态属性与静态方法----------------------------------------------------------
	//类名.属性名或方法名定义
	//访问也是类名.属性名或方法名
	//不能用对象调用
	/*var Person = function(){

	}

	Person.name="zhangsan";
	Person.age = 20;
	Person.show=function(){
		alert("static method is invoked");
	}*/

	//alert(Person.name+","+Person.age);
	//Person.show();

	//var p = new Person();
	//alert(p.name);
    */


	//--------------------5.构造方法------------------------------------------------------------------
	//1.无参构造
	//2.有参构造
	/*function Person(){
		this.show=function(){
			alert("hello");
		}
	}
	var p = new Person();
	p.show();*/

	//2.有参构造
	/*function Person(name,age){
		this.name = name;
		this.age = age;
		this.show = function(){
			alert(this.name+","+this.age);
		}
	}
	var p = new Person("芙蓉姐姐",37);
	p.show();
	*/

	//------------------------6.原型方式声明属性与方法-------------------------------------------------------------------------
	//1.直接原型声明属性和方法
	//2.为引用类型赋值出问题?
	//3.有参构造与原型结合一起用!

	/*
	function Person(){

	}
	Person.prototype.name = "zhangsan";
	Person.prototype.age = 30;
	Person.prototype.show = function(){
		alert(this.name +","+this.age);
	}

	var p = new  Person();
	//alert(p.name);
	 p.show();
   */
	 //问题?
	/* function Person(){

	 }
	Person.prototype.name = "zhangsan";
	Person.prototype.age = 30;
	Person.prototype.arr = ["aa","bb"];
	Person.prototype.show = function(){
		alert(this.name +","+this.age+","+this.arr);
	}

	var p = new Person();
	var p2 = new Person();
	p.arr.push("cc");
	//p.show();

	p2.show();

	*/
	//原型法与公有属性一起使用
	/*function Person(){
		this.name="zhangsan";
		this.age = 30;
		this.arr = ["aa","bb"];
	}
	Person.prototype.show = function(){
		alert(this.name +","+this.age+"," +this.arr);
	}

	var p = new Person();
	var p2 = new Person();
	p.arr.push("cc");
	p.show();

	p2.show();
	*/



/*
	//-------------------------7.直接用Object对象或函数对象加属性与方法-------------------------------------------------------------
	//1.直接用Object对象,再去定义属性和方法
	//2.先定义函数对象,再去定义属性和方法
	//3.json对象方式
	var obj = new Object();
	obj.name="zhangsan";
	obj.age = 20;
	obj.show=function(){
		alert(this.name+","+this.age);
	}

	//obj.show();

	function Person(){

	}

	var person = new Person();
	person.name = "冠希";
	person.age = 34;
	person.show = function(){
		alert(this.name+","+this.age);
	}
	//person.show();

/*
	var p = {name:"xt",age:20,show:function(){alert(this.name+","+this.age);}};
	alert(p.name+","+p.age);
	p.show();
*/
*/

-->
<script type="text/javascript">
    //1.私有属性--------------------------------------------------
    //1.用var声明,不能通过对象名去访问
    //定义一个类,类名叫Person
    /*function Person(){
        var name="张伟";//var声明的变量,私有属性
        this.age=20;//公有属性,用this可以定义一个公有属性

        //私有方法定义
        var showNI=function(){
            alert(name);
        }

        //公有方法定义
        this.showYOU=function(){
            showNI();//调用私有方法
        }
    };
    var p = new Person();
    alert(p.showYOU());*/

    //4.静态属性与静态方法--------------------------------------------
    //类名.属性名或方法名定义
    //访问也是类名.属性名或方法名
    //不能用对象调用
    /*function Person(){
        this.name="tom";
    }
    //静态属性定义时,在function外面定义,定义时,用函数名.属性名=值
    Person.age = 20;
    Person.isMarried="否";
    //静态方法定义
    Person.show = function () {
        //先产生对象,再访问公有属性
        var p = new Person();
        alert(p.name)
    }
    //调用时,直接是类名.属性名
    alert(Person.age);

    //静态方法调用
    Person.show();*/

    //5.构造方法--------------------------------------------------------
    //1.无参构造
    /*
    function Person(){

    }
    var p = new Person();
    p.name = "lili";
    p.show = function () {
        alert("method");
    }
    alert(p.name);
    p.show();
    */
    //2.有参构造
    /*
    function Person(name,age) {
        this.name=name;
        this.age=age;
    }
    var person = new Person("jack",21);
    alert(person.name+","+person.age);
    */
    //6.原型方式声明属性与方法-------------------------------------------------
    //直接原型声明属性和方法
    //为引用类型赋值出问题
    //有参构造与原型结合一起用
    /*
    function getMax(arr){
        var max = arr[0];
        for(var i = 1; i < arr.length; i++){
            if(arr[i]>max){
                max = arr[i];
            }
        }
        return max;
    }
    */
    //通过原型扩展Array中的方法-------------------------------------------------
    /*
    Array.prototype.getMax = function () {
        var max = this[0];
        for(var i = 1; i < this.length; i++){
            if(this[i]>max){
                max = this[i];
            }
        }
        return max;
    }
    var arr = new Array(21,22,33,54,76);
    var result = arr.getMax(arr);
    alert(result);
    */

    //变量共享-----------------------------------------------------------------
    /*
    function Person(){

    }
    Person.prototype.arr=["aa","bb","cc","dd","ee"];
    var p = new Person();
    p.arr.push("ff");
    alert(p.arr);
    var p1 = new Person();
    alert(p1.arr);
    */


    //json
    /*
    var p=[{name:"jack",age:20,sex:"male"},{name:"jack1",age:20,sex:"male"},{name:"jack2",age:20,sex:"male"}];
    alert(p[2].name);
    */

	/*
    var p = {name:"jack",age:20,sex:"male",show:function () {
        alert(this.name+","+this.age+","+this.sex);
    }};
    p.show();
    */

    //继承-----------------------------------------------------------------------
    
    function Person(name,age){
    	this.name=name;
    	this.age=age;
    	//公有方法
    	this.show = function(){
    		alert(this.name+","+this.age);
    	}
    }
    function Student(score){
    	this.score = score;
    }
    var lc = new Person("licheng",20);
    //继承
    Student.propotype=lc;
    //方法重写
    Student.propotype.show=function(){
    	alert(this.name+","+this.age+","+this.score);
    }
    var stu = new Student(90);
    //属性继承
    alert(stu.score+","+stu.name+","+stu.age);
    //方法继承
    stu.show();
    


</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/Ada_yangyang/article/details/81299296