JavaScript教程-43-原型对象常用开发模式

在实际的开发过程中,我们创建对象,给对象添加属性和方法,当需要多个对象共享同一个属性方法的时候,会使用原型来实现。JavaScript的继承是以原型为基础的,接下来我们就看看经常使用的基于原型对象的开发模式。

1:组合模式:使用原型和构造函数的组合

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>原型构造函数创建对象</title>
		<script type="text/javascript">
			//属性封装到构造方法中。
			function Person(name,age){
				this.name = name;
				this.age = age;
			}
			//方法添加到函数原型中
			Person.prototype.show = function(){
				alert("name = "+this.name + " age = "+this.age);
			}
			
			var p1 = new Person("小刚",19);
			var p2 = new Person("小马",18);
			//name = 小刚 age = 19
			p1.show();
			//name = 小马 age = 18
			p2.show();
		</script>
	</head>
	<body>
	</body>
</html>

2:动态原型模式创建对象,可以将所有的内容都封装到一起

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>动态原型模式创建对象</title>
		<script type="text/javascript">
			//动态原型模式创建对象
			function Person(name,age){
				this.name = name;
				this.age = age;
				//第一次调用Person 的时候,show不存在,就添加show 方法。
				//以后调用,因为show方法存在了,就直接调用了。
				if(typeof this.show !== "function"){
					//在原型中添加方法
					Person.prototype.show = function(){
						alert("name = "+this.name + " age = "+this.age);
					}
				}
			}
			
			var p1 = new Person("小刚",19);
			var p2 = new Person("小马",18);
			//name = 小刚 age = 19
			p1.show();
			//name = 小马 age = 18
			p2.show();
		</script>
	</head>
	<body>
	</body>
</html>

3:稳妥构造函数式

所谓稳妥构造函数式,就是没有公共的属性,而且其他的方法也不引用this对象,稳妥模式适合在安全环境中使用。如果你的程序对于安全性要求比较高,可以采用这样的模式。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>稳妥构造函数式</title>
		<script type="text/javascript">
			//稳妥构造函数式类似于java中的java bean 。属性私有。通过getter and setter 去访问
			function Person(name , age){
				//创建一个私有对象
				var obj = new Object();
				//创建私有属性
				var name = name;
				var age = age;
				//创建对应的getter和setter
				obj.getName = function(){
					return name;
				}
				obj.setName = function(_name){
					name = _name;
				}
				obj.show = function(){
					alert("name = "+name + " age = "+age);
				}
				return obj;
			}
			//测试
			var obj = new Person("小刚",18);
			obj.show();//name = 小刚 age = 18
			obj.setName("小兰");
			alert(obj.getName());//小兰
			obj.show();//name = 小兰 age = 18
		</script>
	</head>
	<body>
	</body>
</html>

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值