使用原型对象可以不污染全局作用域

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			/**
			 * 原型prototype
			 * 我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype
			 * 这个属性对应着一个对象,这个对象就是我们所谓的原型对象
			 * 如果函数作为普通函数调用prototype没有任何作用,
			 * 因为普通函数的对象类型都是Object,而new出来的 构造函数类型都不一样
			 * 所以prototype也是不一样的。
			 * 
			 * 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象
			 * 		我们可以将对象中共有的内容,统一设置到原型对象中
			 * 
			 * 当我们访问对象的一个属性或方法时,他会先在对象自身寻找,如果有直接使用,
			 * 如果没有,就会去原型对象中找,找到就可以使用
			 * 以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,
			 * 这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法
			 * 
			 */
			
			function MyClass(){
				
			}
			//向myClass的原型中添加属性a
			MyClass.prototype.sayHello=function(){
				alert("helllo");
			}
			var mc=new MyClass();
			MyClass.prototype.a=123;
			var mc2=new MyClass();
			mc2.a="我是mc2中的a"
			console.log(mc.a);
			console.log(mc2.a);
			mc.sayHello();
			
		</script>
	</head>
	<body>
	</body>
</html>

判断属性在哪里in 和 hasOwnProperty()

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			/**
			 * 创建一个构造函数
			 */
			function MyClass(){
				//this.name="zhgn"
			}
			MyClass.prototype.name="我是原型中的名字"
			var mc=new MyClass();
			//使用in检查对象中是否含有某个属性时,如果对象中没有
			//但是原型中有,也会返回true.
			console.log("name" in MyClass);
			
			//使用hasOwnProperty()来检查对象自身中是否含有该属性
			
			
			/**
			 * 原型对象也是对象,所以呀他也有原型
			 * 当我们使用一个对象的属性或方法时,会先在自身中寻找
			 * 如果自身有,就直接使用
			 * 如果没有就去原型对象中寻找,如果有,就使用
			 * 如果还是没有就去原型的原型中寻找
			 */
			console.log(mc.hasOwnProperty("name"));
			console.log(mc.name);
		</script>
	</head>
	<body>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_41648092/article/details/88936933