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

function Person(){}

var p=new Person();



/*

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

定义使用属性:

1.在函数中:用var定义

2.在还是外:用对象.属性定义

定义公有属性:

1.在函数中:用this.属性定义

2.在函数外:函数名.prototype.属性名=默认值;定义




*/


function Person2(){

var name="张三";//定义属性为私有属性

this.age=100;
//定义公有属性

}

var p2=new Person2();

p2.weight=180;
//定义私有属性

Person2.prototype.sex="0";

Person2.aaa="bbb";



//alert(p2.weight);



var p23=new Person2();

//alert("weight="+p23.weight);

//alert("name="+p23.name);

//alert("age="+p23.age);

//alert("sex="+p23.sex);



/*

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

定义私有方法:

1.在函数中:采用 var 方法名=function(){}定义

2.在函数外:采用 对象名.方法名=function(){}定义

定义公有方法:

1.在函数中:采用 this.方法名=function(){}定义

2.在函数外:采用 对象名.prototype.方法名=function(){}定义

*/

function Person3(){

var show=function(){

alert("我是私有方法");

}

this.display=function(){

alert("我是公有方法");

}

}



var p3=new Person3();

p3.show(); //无法调用,因为是私有的

//p3.display();



p3.eat=function(){

alert("我是私有的方法,函数外定义");


}

Person3.prototype.age=function(){

alert("我是公有方法,函数外定义");


}



var p33=new Person3();



//p3.eat();

p33.eat();//无法调用,因为eat方法是私有的,只属于p3对象

//p33.age();

Person3.age();//无法调用,公用方法需要用对象来调用,只有静态方法才能用函数名来调用



/*

4.静态属性和静态方法

注意:定义静态属性和方法都用函数名来定义。

调用的时候只能用还是名来调用,不能用对象调用。

*/



function Person4(){}

Person4.name="张三";

Person4.show=function(){

alert("我是静态方法,只能用函数名来调用");


}



//Person4.show();

var p4=new Person4();

//p4.show(); //出错,因为静态方法只能用函数名来调用





/*

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

注意:函数名不要重复,因为先定义的函数永远调用不了

*/



/*

7.如何创建Javascript对象

创建Javascript对象的三种方式

1.采用 new 函数名();

2.采用 new Object();

3.采用 Json格式定义

*/



//json格式

var json={"a":"中国","b":"美国","c":"英国 "};//定义了一个json对象

var json1={1:"中国",2:"美国",3:"英国 "};

//alert(json.a);//拿到中国字符串

//alert(json["b"]);

//alert(json1[1]);



//如果想拿到所有的值,需要使用foreach循环

//for(var a in json1){

//
alert(a+" : "+json1[a])


//}



/*

扩展已有对象属性和方法

*/



//例如扩展Array数组的方法

/*

Array.prototype.getMax=function(){

var max=this[0];

for(var i=0;i<this.length;i++){

if(this[i]>max){

max=this[i];

}

}

return max;

}



var arr=[12,52,3,15,66,32];

alert(arr.getMax());

*/



/*

继承


*/



function Person8(){

var name="张三";

this.age=100;

this.show=function(){

alert("我是公有方法");

}

}



function Student(){};

//希望student函数继承于Person函数

Student.prototype=new Person8();

var s=new Student();

//alert(s.name);

//alert(s.age);

//s.show();





/*

arguments对象

arguments对象:代表了一个参数对象

*/



function $(id){

//用于判断用户传递的参数个数

if(arguments.length>1){

alert("传递的参数不得大于1个");


return;

}

var p=document.getElementById(id);

if(p==null){

alert("传递id的值不对!");

}

return p;

}



function fun(){

var p=$("p",1);

alert(p.innerHTML);

}



/*

with

*/



function fun1(){

var p=$("p");

//p.style.border="1px read sode";

//p.style.color="green";

//p.style.cursor="hand";
//该效果等价于如下with,相当于少写个p


with(p){

style.border="1px read sode";

style.color="green";

style.cursor="hand";


}

}





/*

foreach循环

foreach循环是对对象的属性进行循环

*/



function fun2(){

var p=$("p");

for(var a in p){

alert(a);

}

}