请通过浏览器功能收藏网页

javascript 基础: 面向对象 继承 实现方式1 javascript

发布时间:2019-01-03 23:37:46  作者:本站编辑  来源:本站原创  浏览次数:
我有话说 | 分享 |
www.javainfo.com.cn 上干货 欢迎收藏
一、Object对象

     //var obj=new Object();	
     // //  对创建对象的函数的引用(指针)
     //alert(obj.constructor);  //function Object() { [native code] }  

     Object对象的属性:
   2.Prototype 这个属性的功能,
	
	       1 对该函数对象的对象原型的引用。是  函数对象   的默认属性
		     
			        function animal(){}
			        alert(animal.prototype);  // 
			        //对象的构造函数内容 会调用出来, 说明对象都是 object的一个子类
				     alert(animal.constructor);  				
					var  aa = new animal();
					function animal(){					  
					}
					alert(aa.constructor);  //实例化对象的构造函数内容 会调用出来
					
               2  对象的共享 属性存放到代码段当中  (知识回顾,prototype可以将函数 或  属性 共享到js共享代码段内存区域)
		      		function animal(){				  
				}
				animal.prototype.fly=function(){
				   alert("share method fly");
				}
		        var laoshu = new animal();
				laoshu.fly();   //share method fly
			          
              3 可以实现继承。
		
		function animal(){
		  this.name = 'animal name';
		  this.eat=function(type){
		    alert(type +'  eat');
		  }
		}
		function Laoshu(){
		  
		}
		Laoshu.prototype = new animal();
		
		var laoshu  = new Laoshu();
		
		//alert(laoshu.name);  //animal name   调用父类 animal的 方法成功 
		//laoshu eat ..........   eat  调用父类的方法成功,且成功继承下来 调用
	        //laoshu.eat('laoshu eat .......... ');   
		
		-----------------------------------------------------------------------------------------
		
		function animal(name){
		  this.name = name + ' --name--';
		  this.eat=function(type){
		    alert(type +'  eat');
		  }
		}
		function Laoshu(name){
		  return new animal(name);
		}
			
		var laoshu  = new Laoshu('xiao lao shu');
		alert(laoshu.name);   //xiao lao shu --name--    属性方法完成继承
		
		-----------------------------------------------------------------------------------------------
		
		
		function animal(name){
		  alert(2)
		  this.name = name + ' --name--';
		  this.eat=function(type){
		    alert(type +'  eat');
		  }
		}
		function Laoshu(name){
		  alert(1);
		}
		Laoshu.prototype = new animal(name);	
        alert(Laoshu.name);		
		var laoshu  = new Laoshu('xiao lao shu');  //2 [name = --name-- ] laoshu  1 [name = xiao lao shu --name--  + --name--] 执行顺序 
		alert(laoshu.name);    //xiao lao shu --name-- --name--

		----------------------------------------------------------------------------------------
		
		
    //对象的共有属性或方法
        1 hasOwnProperty(property)   判断对象是否有某个特定的属性
		function animal(name){
		  this.name = ' animal --name--';
		  this.eat=function(type){
		    alert(type +'  eat');
		  }
		}
		function Laoshu(name){
		  return new animal(name);
		}
		var animals = new animal('sf');
		var laoshu  = new Laoshu('xiao lao shu');
		//alert(laoshu.hasOwnProperty('name'));  //true
		//alert(laoshu.name);  // animal --name--
		
		
		//alert(Laoshu.prototype.isPrototypeOf(laoshu));  //false  Laoshu的原型 是否是 laoshu 的原型
		//alert(animal.prototype.isPrototypeOf(laoshu));   //true
		//alert(animal.prototype.isPrototypeOf(animals));    //true
		//alert(animal.isPrototypeOf(animals));    //false
		//alert(Laoshu.isPrototypeOf(laoshu));    //false
   
                 function tfun(){}
		var tt = new tfun();
		//alert(tfun.prototype.isPrototypeOf(tt)); //true   简单对象的实例化  比较很快
		//运算符  instanceof 
		alert(tt instanceof tfun)   //true
		// 这里由于老鼠的构造函数 直接返回了 animal 的实例化对象,所以这里是false
		alert(laoshu instanceof Laoshu); //false   
		alert(laoshu instanceof animal);  //true    老鼠实际上 是 animal 对象的一个实例 
		alert(animals instanceof animal); //true
		*/
   
	  
继承的JS代码实现

 1.原味继承
          
  function animal(){
		  this.name = ' animal --name--';
		  this.eat=function(type){
		    alert(type +'  eat');
		  }
		}
		function Laoshu(){		  
		}
 		Laoshu.prototype = new animal();
		var laoshu = new Laoshu();
		alert(laoshu.name); //animal --name--
		//true    老鼠的实例对象 继承了  animal 对象 , 老鼠是老鼠的实例化对象 true
		alert(laoshu instanceof Laoshu);   //true  
		alert(laoshu instanceof animal);   //true   老鼠是动物的一个实例化对象  true
    

  2.对象冒充的形式  obj1.fun.call(obj2,参数1......)
	      function Animal(){
		  this.name = ' animal ';
		  this.eat=function(p){
		    alert(this.name + '   ' + p + '  eat');
		  }
		}
		function Laoshu(){		  
		   this.name = 'laoshu';
		}
		var animal = new Animal();
		var laoshu = new Laoshu();
		
		//laoshu   tttt  eat  老鼠方法成功调用了animal的方法  ,及继承了animal的方法
		 //且name属性覆盖了 animal的 name属性 
		animal.eat.call(laoshu,'tttt');   
		
	  
 3.apply  obj1.fun.call(obj2,[参数1,参数2....])
        function Animal(name){
		  this.name = name + ' animal ';
		  this.eat=function(p){
		    alert(this.name + '   ' + p + '  eat');
		  }		
		}
		function Laoshu(){		  	
		   Animal.apply(this,['mikeee']);
		}
		var laoshu = new Laoshu();
		alert(laoshu.name);  //mikeee animal   
		laoshu.eat(333);  //mikeee animal    333  eat

    //让对象1的方法冒充成对象2的方法。



如有疑问 请留言 欢迎提供建议
  • 0

    开心

  • 0

    板砖

  • 0

    感动

  • 0

    有用

  • 0

    疑问

  • 0

    难过

  • 0

    无聊

  • 0

    震惊

评论已有 0