JS对象的创建和继承


一下是 JS 对象的常用的对象创建的集中方式:

<script type="text/javascript">
		// 在 javascript 中没有类的概念 只有 对象
		/*1:定义对象 基于原有的对象进行扩展
			// 事项创建动态给对象添加和删除
			var obj = new Object();// object 类中的属性是不可枚举的
			obj.name = "zhang san";
			obj["age"] = 20; // 动态的给 obj 对象添加 age 属性
			alert(obj.name);
			alert(obj.age);
			delete obj.name; // 删除 属性
			alert(obj.name);
			alert(obj.age);
			obj.sayName = function(name){ // 动态的给 obj 对象添加 方法
				this.name = name;
				alert(this.name);
			}
			obj.sayName("lisi");
		*/
		/*
		2: 定义对象的第二种方式
			var obj = {username:"zhangsan",password:"12345"};
			alert(obj.username);
		*/
		
		/*
		3:工厂方法 定义对象
		function createObject(){
			var object = new Object();
			object["name"] = "zhangshan";
			object.password = "1234";
			object.get = function(){
				alert(this.name +"," + this.password);
			}
			return object;
		}
		var object1 =  createObject();// 通过工厂方法 得到 对象
		object1.get();
		*/
		/* 带参数的 构造
		function createObject(username, password){
			var object = new Objcet();
			object.username = username;
			object.password = password;
			object.get = function(){
				alser(this.username +"," + this.password);
			}
		}*/
		/*让一个函数对象被多个构造函数共享
		function get(username, password){
			alert(this.username +","+ this.password);
		}
		function createObject(username, password){
			var object = new Object();
			object.username = username;
			object.password = password;
			object.get = get
			return object;
		}
		var  obj = createObject("张三","1234");
		obj.get();*/
		
		/*
		4:通过 prototype (原型方式) 来实现 对象 构造
			prototype 是 object 对象的一个属性
		注意:1:单纯的使用原型 prototype 方式构造类 无法在构造函数中对属性进行付初值,
				只能在生产对象后进行改变。
			  2:使用 prototype 构造函数 会使多个对象 共享一份 对象的引用
		function Person(){
		}
		Person.prototype.name = "zhangsan";
		Person.prototype.age = 13;
		Person.prototype.get = function (){
			alert(this.name +"," + this.age);
		}
		var  person = new Person();
		person.get();
		person.name = "lisi";
		person.get();*/
		/*
		5:使用 动态原型 prototype 方法,是的 每个 对象拥有自己的属性 但是共享一个方法
		function Person(){
			this.name = "zhangsan";
			this.age = 12;
			if( typeof Person.flage == "undefined"){
				Person.prototype.getInf = function(){
					alert(this.name +"," + this.age);
				}
				this.flage = true;
			}
		}
		var p1 = new Person(); p1.getInf();
		var p2 = new Person(); p2.getInf();
		*/
		</script>
一下是常用对象的继承方式:

		<script type="text/javascript">
			/*1: 使用 对象冒充 实现继承
			function Parent(username){
				this.username = username;
				this.sayname = function (){
					alert(this.username);
				}
			}
			function Child(username, password){
				this.temp = Parent; // 将 父类对象的应用 付给 this.temp 
				this.temp(username); // 调用构造 方法,此时构造方法 中 的 this 指向的是Child 所以会在 Child 中生成相应对象
				delete this.temp;    // 实际上实现了 this的传递
				this.password = password;
				this.sayPass = function (){
					alert(this.password);
				}
			}
			var chirld = new Child("李斯","123");
			chirld.sayname();
			chirld.sayPass();*/
			/*2: 使用 call 实现 继承 call 方法是每个 function 中都存在的方法, call(param1, param2,...);第一个参数
				指向的是 调用 call 的this
			function Parent(username){
				this.username = username;
				this.sayname = function (){
					alert(this.username);
				}
			}
			function Child(username, password){
				Perent.call(this, username);
				this.password = password;
				this.sayPass(){
				}
			}
			*/
			/*3: 使用 apply 实现继承 
				 apply 实现的原理 与 call 一样 只是 apply为 apply(Param1, new Array());
			function Parent(username){
				this.username = username;
				this.sayname = function (){
					alert(this.username);
				}
			}
			function Child(username, password){
				Parent.apply(this, [username]); // Parent.apply(this, new Array(username));
				this.password = password;
				this.sayPass(){
				}
			}
			*/
			


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章