js面向对象

一.对象的组成

	/*
	面向对象编程的特点
		抽象:抓住核心问题
		封装:只能通过对象来访问方法
		继承:从已有对象上继承出新的对象
		多态:多对象的不同形态
	1.对象的组成
		方法(行为、操作)——函数:过程、动态的
		属性——变量:状态、静态的
	
	 * */
	
	//对象的组成
	var arr=[];
	//对象下面的变量:叫做对象的属性
	arr.number=10;
//	alert(arr.number);
//	alert(arr.length);

	//对象下面的函数:叫做对象的方法
	arr.test=function(){
		alert(123);
	}
	arr.test();

二.创建第一个面向对象程序

//创建了一个空的对象
	var obj=new Object();
	//属性
	obj.name='小明';
	//方法
	obj.showName=function(){
//		alert(obj.name);
		alert(this.name);
	}
	obj.showName();

三.工厂方式

/*
	工厂方式
		面向对象中的封装函数
		改成与系统对象类似写法
			首字母大写
			New关键字提取
			This指向为新创建的对象
                             当new去调用一个函数:这个时候函数中的this就是创建出来的对    象,而且函数的返回值直接就是this了(隐式返回)              
		构造函数
			用来创建对象的函数,叫做构造函数
                        new后面调用的函数
		存在的问题
			对象的引用
			浪费内存
	 * */
//	var obj=new Object();
//	obj.name='小明';
//	obj.showName=function(){
//		alert(this.name);
//	}
//	obj.showName();
	
	
//	var obj1=new Object();
//	obj1.name='小强';
//	obj1.showName=function(){
//		alert(this.name);
//	}
//	obj1.showName();
	
	function creatPerson(name){
		//1.原料
		var obj=new Object();
		//2.加工
		obj.name=name;
		obj.showName=function(){
			alert(this.name);
		}
		//3.出场
		return obj;
	}
	var p1=creatPerson('小明');
	p1.showName();
	var p2=creatPerson('小强');
	p2.showName();    




//提取new
	function creatPerson(name){
		//1.原料
//		var obj=new Object();
		//2.加工
		this.name=name;
		this.showName=function(){
			alert(this.name);
		}
		//3.出场
		return obj;
	}
	var p1=new creatPerson('小明');
	p1.showName();
	var p2=new creatPerson('小强');
	p2.showName();                         

四.原型

/*
 原型:去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中存在一份(提高性能)
 * */
	
	
/*
var a=[1,2,3];
var b=[1,2,3];
alert(a==b); //false
*/


/*
var a=5;
var b=a;
b+=3;
//alert(b);
//基本类型:赋值的时候只是复制
alert(a);
*/

/*
var a=[1,2,3];
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]
*/

//比较
var a=5;
var b=5;
//基本类型:值相同就可以
alert(a==b); //true

var a1=[1,2,3];
var b1=[1,2,3];
//对象类型:值和引用都相同才行
alert(a1==b1); //false

var a2=[1,2,3];
var b2=a2;
//对象类型:值和引用都相同才行
alert(a2==b2); //true

原型

/*
原型-prototype
	概念
		去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中存在一份(提高性能)
	学习原型
		类比:CSS中的Class
	通过原型改写工厂方式
		原则
			相同的属性和方法可以加在原型上
			混合的编程模式
	总结面向对象写法
		构造函数加属性,原型加方法
		
		function 构造函数(){
			this.属性
		}
		构造函数.原型.方法=function(){}
 		var 对象1=new 构造函数();
 		对象1.方法();
 * */
	
	
/*var arr=[1,2,3,4];
var arr1=[2,2,2,2,2,2,2];
arr.sum=function(){
	var result=0;
	for (var i=0;i<this.length;i++) {
		result+=this[i];
	}
	return result;
}
arr1.sum=function(){
	var result=0;
	for (var i=0;i<this.length;i++) {
		result+=this[i];
	}
	return result;
}
alert(arr.sum());
alert(arr1.sum());*/

var arr=[1,2,3,4,5];
var arr1=[2,2,2,2,2,2,2];
Array.prototype.sum=function(){
	var result=0;
	for (var i=0;i<this.length;i++) {
		result+=this[i];
	}
	return result;
}
alert(arr.sum());
alert(arr1.sum());


Array.prototype.number=20;
//优先级高
arr.number=10;
alert(arr.number); //10

  

  

  

  

  

 

posted @ 2018-01-24 17:26  carol72  阅读(117)  评论(0编辑  收藏  举报