js创建对象之原型模式3、更简洁的创建原型模式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
		//创建对象
		//原型模式
		//更简单的原型语法
		//之前为原型添加属性都要写一遍prototype,麻烦,解决方法如下
		function Person(){};
		Person.prototype = {
			name: "宝清老窖",
			age: 30,
			job: "Software",
			sayName: function(){
				console.log(this.name);
			}
		}
		//简便了不少哈,但是constructor属性不再指向Person了,因为我们重写了prototype
		//虽然instanceof还能返回正确的结果,但是constrctor已经无法确定对象的类型
		var friend = new Person();
		console.log(friend instanceof Object);	//true
		console.log(friend instanceof Person);	//true
		
		console.log(friend.constructor == Person);	//false
		console.log(friend.constructor == Object);	//true
		
		console.log('---------------------------------------------------');
		//所以需要改造成下面的方式
		function Person(){};
		Person.prototype = {
			constructor: Person,
			name: "宝清老窖",
			age: 30,
			job: "Software",
			sayName: function(){
				console.log(this.name);
			}
		}
		var friend = new Person();
		console.log(friend instanceof Object);	//true
		console.log(friend instanceof Person);	//true
		
		console.log(friend.constructor == Person);	//true
		console.log(friend.constructor == Object);	//false
		//但是以这种方式的话,constructor的[[Enumerable]]为true
		//所以得改成false
		function Person(){};
		Person.prototype = {
			name: "宝清老窖",
			age: 30,
			job: "Software",
			sayName: function(){
				console.log(this.name);
			}
		}
		Object.defineProperty(Person.prototype , 'constructor' , {
			enumerable: false,
			value: Person
		})
		//Object.keys(Person.prototype);为		["name", "age", "job", "sayName"]
		</script>
	</body>
</html>

  提取出js

//创建对象
		//原型模式
		//更简单的原型语法
		//之前为原型添加属性都要写一遍prototype,麻烦,解决方法如下
		function Person(){};
		Person.prototype = {
			name: "宝清老窖",
			age: 30,
			job: "Software",
			sayName: function(){
				console.log(this.name);
			}
		}
		//简便了不少哈,但是constructor属性不再指向Person了,因为我们重写了prototype
		//虽然instanceof还能返回正确的结果,但是constrctor已经无法确定对象的类型
		var friend = new Person();
		console.log(friend instanceof Object);	//true
		console.log(friend instanceof Person);	//true
		
		console.log(friend.constructor == Person);	//false
		console.log(friend.constructor == Object);	//true
		
		console.log('---------------------------------------------------');
		//所以需要改造成下面的方式
		function Person(){};
		Person.prototype = {
			constructor: Person,
			name: "宝清老窖",
			age: 30,
			job: "Software",
			sayName: function(){
				console.log(this.name);
			}
		}
		var friend = new Person();
		console.log(friend instanceof Object);	//true
		console.log(friend instanceof Person);	//true
		
		console.log(friend.constructor == Person);	//true
		console.log(friend.constructor == Object);	//false
		//但是以这种方式的话,constructor的[[Enumerable]]为true
		//所以得改成false
		function Person(){};
		Person.prototype = {
			name: "宝清老窖",
			age: 30,
			job: "Software",
			sayName: function(){
				console.log(this.name);
			}
		}
		Object.defineProperty(Person.prototype , 'constructor' , {
			enumerable: false,
			value: Person
		})
		//Object.keys(Person.prototype);为		["name", "age", "job", "sayName"]

  

原文地址:https://www.cnblogs.com/xudy/p/5427049.html