JavaScript面向对象

JavaScript面向对象

准确的说JavaScript是基于对象,而不是面向对象,因为没有想C++/java/c#那样的类,抽象,接口等;

1.创建对象;

没有类,属性和方法都是在对象创建以后定义的;

		<script type="text/javascript">
				
			//创建了一个空的object对象;
			var object = new Object();
			//定义属性;
			object.name="张三"
			object.age="22";
			//定义方法;
			object.getName =function (){
				return this.name;
			}
			object.getAge =function (){
				return this.age;
			}
			
			//调用方法;
			console.log(object.getName())
		</script>

2.自定义构造函数:

		<script type="text/javascript">
			//构造函数和普通函数最大的区别是就是首字母大写的;
			function Student(name,age,sex){
				this.name=name;
				this.age=age;
				this.sex=sex;
				this.study=function(){
					console.log("正在学习");
				}
			}
			var student1=new Student("lucy",18,1);
			console.log(student1.name)
			student1.study();
		</script>

当然在给对象定义属性的时候还可以这样写:

			var o = new Object();
			o["name"]="zhangsan";
			o["age"]=100;

3.对象的字面量:

就相当于java中的 int[] aa=[1,2,3];

只不过是键值对的形式;

和json是一样的,只不过json中的key要带引号;

		<script type="text/javascript">
			var obj={
				name:"zhangsan",
				age:18,
				sex:1,
				arr:[],
				oo:{},
				ff:function(){
					console.log("对象的字面量");
				}
			}
		</script>

4.遍历对象中的所有的属性:

		<script type="text/javascript">
			var obj={
				name:"zhangsan",
				age:18,
				sex:1,
				arr:[],
				oo:{},
				ff:function(){
					console.log("对象的字面量");
				}
			}
			
			//遍历obj对象中的所有的属性;
			for(var key in obj){
				console.log(key);
				console.log(obj[key]);
			}
		</script>

5.基本数据类型和引用数据类型;

基本数据类型:string number Boolean

其余都是引用数据类型 包括function函数;

和java中的原理是一样的;哪些是拷贝的,那是引用的;

6.函数数据类型

在javascript中函数是一种数据类型,所以可以作为函数参数传递;

如果定义一个构造函数,在构造函数内部声明定义一个函数的话,每次创建对象的时候都会创建一个这样的函数;和java不同的是每个对象中的同样函数也是不相同的;是独立存在的。所以有一万个这样的对象的话,就有一万个这个样的函数;

所以当函数定义放在全局变量中,当对象创建的时候在构造函数中进行函数赋值操作;但是这样又有一个问题,这样就污染了全局变量的命名空间;也不符合封装的思想;

这个时候就引入一个概念:

原型对象:每一个方法在调用的时候都会创建一个原型对象prototype,这个原型对象相当于java中的静态全局对象,所有的对象所共享的一个成员对象;

如果是普通函数,可以动过方法名.prototype等到该对象;

如果是构造函数,可以通过方法名点prototype、通过对象点prototype得到该对象(这种方式会先在对象中找,如果找不到会在原型对象中找;但是如果在对象中定义了这个方法,现在对象中找到了,就不会去原型对象中找了);

		<script type="text/javascript">
			function Student(aaa){
				this.aaa=aaa;				
			}
			//原型對象;所以在定义方法的时候一般定义在原型对象中;
			Student.prototype.fang=function(){
					console.log(this.aaa)
			}	
			
			var s1=new Student("111");
			var s2=new Student("222");			
			s1.fang();	
			s2.fang();	
			console.log(s1.fang==s2.fang);//true	
		</script>

其实原型对象中,还有一个原型对象object对象,但是原型object是没有原型对象(prototype=null),一些方法封装在这个原型对象中;

		<script type="text/javascript">
			function Student(aaa){
				this.name=aaa;				
			}
			//原型對象;所以在定义方法的时候一般定义在原型对象中;
			Student.prototype.fang=function(){
					console.log(this.name)
			}	
			
			var s1=new Student("111");
			var s2=new Student("222");			
			s1.fang();	
			s2.fang();	
			console.log(s1.fang==s2.fang);//true
			
			//判断一个对象中有没有某个属性,如果有返回true,如果没有的话,在原型对象中找,有返回true,没有返回false;
			console.log("name" in s1);
			//如果只想在是s1对象中找有没有某个属性;但是s1中没有定义hasOwnProperty函数呀,其实定义在原型对象中的;
			console.log(s1.hasOwnProperty("name"));
		</script>

7.修改toString方法

因为对象中的toString方法是定义在原型中,所以要修改原型中的;

 

8.array的遍历

这个api在ie8以上才可以;

			var arr=[1,2,3,4,5];
			arr.forEach(function(value,index,arr){
				console.log(value);
			});

9.修改函数中的this对象

在javascript中函数也是对象,有自己的方法

其中方法call和apply就可以修改传进去的this对象

例如:

var fang = function(){}

var obj = new Object();

fang.call(obj); //此时fang函数已经调用了;

则方法fang中的this对象就是obj了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值