对象的组成:
方法(行为,操作) 对象下的函数,叫对象的方法 :array.push array.sort
属性 对象下的变量,叫做对象的属性 如array.length
var obj= new Object();
obj.name='xiaoming'; //对象具有属性
obj.showName=function(){ //对象具有showName()的方法
alert(this.name);
}
当new 去调用一个函数:这个时候函数中的this就是创建出来的对象,而且函数的返回值直接就是this了。
new 后面调用的函数,就是构造函数;
function CreatePerson(name){
this.name=name;
this.showName=function(){
alert(this.name);
}
}
var p1=new CreatePerson('xiaoming');
p1.showName();
var p2=new CreatePerson('xiaoqiang');
p2.showName();
基本类型:赋值的时候只是值的复制;
var a=5;
var b=a;
b+=3;
alert(b) // 8
alert(a)// 5
对象
var a=[1,2,3,4]
var b=a;
b.push(4);
alert(b);//[1,2,3,4]
alert(a); //[1,2,3,4]
对象:赋值的时候不仅是值的复制,而且也是引用的传递;
var a=[1,2,3]
var b=a;
b=[1,2,3,4]
alert(b);//[1,2,3,4]
alert(a);//[1,2,3] //因为重新给B赋值了。所以a的值没有变;
var a=5;
var b=a;
alert(a=b)// ture
var a=[1,2,3];
var b=a;
alert(a=b)// flase
原型:去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中只有一份(提高性能)
//原型: css中的class;
//普通方法: css中的style;
var arr=[1,2,3,4,5];
arr.sum=function(){
var result=0;
for(var i=0;i<this.length;i++){
result+=this[i]
}
return result;
}
原型:prototype:要写在构造函数下面;
Array.prototype.sum=function(){
var result=0;
for(var i=0;i<this.length;i++)
{
result+=this[i];
}
return result;
}
var arr1=[1,2,3,4,5];
var arr2=[1,2,3,4];
alert(arr1.sum());//15
alert(arr2.sum())//10
==================================================
面向对象的写法:
function 构造函数(){
this.属性
}
构造函数.prototype.方法=function(){};
例如: var 对象1= new 构造函数(); //创建一个新对象
对象1.方法();
写面向对象的原则:
-先写出普通的写法,然后改成面向对象的写法;
>>普通方法变形
1.尽量不要函数嵌套函数;
2.可以有全局变量;
3.把onload中不是赋值的语句放到单独的函数中
>>改成面向对象
1.全局变量就是属性;
2.函数就是方法;
3.onload中创建对象;
4.更改this指向