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>