JavaScript教程-38-JavaScript面向对象编程

1:JavaScript不是面向对象的一种编程语言,而是基于对象的。因为JavaScript是基于对象的一种脚本语言,所以没有所谓的类似java中 类 class 的概念。但是我们可以通过JavaScript代码去模拟类的概念,让它看上去更像面向对象的。

 

2:下面我们通过示例,对比传统的创建对象的方式和模拟类创建对象的方式。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>模拟类</title>
		<script type="text/javascript">
			//1:传统的创建对象,创建对象,并设置属性和方法
			var obj = new Object();
			obj.name = "小刚";
			obj.age = 15;
			obj.gender = "男";
			obj.show = function(){
				alert("我的名字:"+this.name);
			}
			//我的名字:小刚
			obj.show();
			
			//模拟类:1:使用工厂模式,模拟类 创建一个 人的对象
			function createPerson(name,age,gender){
				var obj = new Object();
				obj.name = name;
				obj.age = age;
				obj.gender = gender;
				obj.show = function(){
					alert("我的名字:"+this.name);
				}
				return obj;
			}
			//创建person对象
			var person = createPerson("小兰",17,'女');
			person.show();//我的名字:小兰
			
			//模拟类:2:使用构造函数式
			function Person(name,age,gender){
				this.name = name;
				this.age = age;
				this.gender = gender;
				this.show = function(){
					alert("我的名字:"+this.name);
				}
			}
			//通过类创建多个person对象
			var person1 = new Person("小马",18,"男");
			alert(person1.name);//小马
			person1.show();//我的名师:小马
			var person2 = new Person("小马1",20,"男");
			alert(person2.name);//小马1
			person2.show();//我的名师:小马1
			
			//测试person1和2是不是Person的实例
			alert(person1 == person2);//false  说明是不同的实例
			alert(person1.constructor == Person);//true 对象的属性 构造方法 是 Person
			//还可以通过instanceof 判断对象是否是Person的实例
			alert(person1 instanceof Person);//true
			alert(person2 instanceof Person);//true
			alert(person1 instanceof Object);//true   Object 是所有“类”的基类
			
			//总结:创建对象的方式
			//1:将Person当作构造方法去使用
			var p1 = new Person("翠花",20,"女");
			alert(p1.name);//翠花
			
			//2:将Person当作普通的方法去调用
			//注意,这个时候,Person 里面的this 指代的就是当前对象window
			//相当于把属性和方法给window 添加上了。
			Person("翠花1",21,"女");
			window.show();//我的名字:翠花1
			
			//3:通过其他的对象创建 通过 call、 apply 方法
			var per = new Object();
			//相当于把里面的this换成了 per 对象
			Person.call(per,"翠花2",22,"女");
			per.show();//我的名字:翠花2
			
			Person.apply(per,["翠花3",22,"女"]);
			per.show();//我的名字:翠花3
			
		</script>
	</head>
	<body>
	</body>
</html>

PS:笔者有大量的学习资料:java、python、大数据、人工智能、前端等。需要的小伙伴请加群:711408961

笔者的b站中有一些教学视频分享。感兴趣的小伙伴可以关注:https://space.bilibili.com/412362068

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值