Es5继承

Es5 对象和原型链实现混合继承

方法的区别

在构造函数和原型链添加方法区别:

		Object.prototype.test=function(){
            alert('我是原型链上 test()');
        }
            function Person(){
                 this.name='张三';
                 this.age=20;
                 function test(){
                     alert('我是Person上 test()')
                 }
            }
            function Son(){
                
            }
             var p=new Son()
             p.test();
             //  打印的是原型链上 test()

结论: 原型链上的方法会被多个实例 共享,构造函数不会

静态方法:

			function static(){

             }

             static.add=function(){
                 alert('静态方法')
             }

E5的继承

原理: 原型链+对象冒充的组合继承模式

对象冒充实现继承

				function Father(){
				}
  		function Son(){
  		
  		}function Father(){
          this.name='张三';
               this.age=20;
               this.test =function(){
                   alert('我是Father')
               }
				}
  		function Son(){
              Father.call(this);  // 通过改变 this 指向 对象冒充继承
          }
          var w=new Son();
          w.test();

总结: 对象冒充可以继承构造的数里面的属性和方法 但是无法继承原型链上的属性和方法

原型链实现继承

					
        function Father(name,age){
            this.name='张三';
                 this.age=20;
                 this.test =function(){
                     alert('我是Father')
                 }
  				}
			function Son(){
                Father.call(this);  // 通过改变 this 指向 对象冒充继承
            }
            Father.prototype.wx=function(){
                 alert('原型链上的方法')
            }
            Father.prototype.sex='男'
            Son.prototype=new Father()
            var w=new Son();
            w.wx();

总结 原型链实现继承:可以继示构造数里面的属性和方法也可以继承原型链上面的属性和方法 但是实例化子类时没办法给父类传参

优化

					
   function Father(name, age) {
           this.name = name;
           this.age = age;
           this.test = function () {
               alert(`我叫${name} 今年${age}`)
           }
       }

       function Son(name,age) {
           Father.call(this, name, age); // 通过改变 this 指向 对象冒充继承
       }
       Father.prototype.wx = function () {
           alert('原型链上的方法')
       }
       Father.prototype.sex = '男'
       Son.prototype = new Father()
       var w = new Son('李白',20);
       w.test()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值