js继承(自备水,这非常干货)

讲js继承之前,想一想什么是继承? 生活中有很多例子,比方说继承财产,继承女朋友的前男友的前女友 ヽ(ー_ー)ノ这些和js继承差不多,但是有一个不一样的地方,就是继承过后,原先的人就没有了,js继承过后原先还有原先的属性。

最简单的继承 : 原型链继承(我最简单,也重要,也常见,不要因为简单看不起我,我很傲娇的   o(´^`)o

        原型链继承抓住了一个重要核心: 我指向的构造函数的实例就能访问原型的方法(没错,不需要理由谁叫我是你爸爸,我的方法给你用  ( ̄ェ ̄;)

        (爸爸更新的技术儿子享受就行了,爸爸添加的方法给儿子用)

function Wife( ){ 
     this.say : function(){ 
          console.log( ' 今天你也很美,比月亮还美 ' )  
  }
}

// 生一个儿子呗
var  son = new Wife()

// 找到老公并且给孩子他爹发明一个方法fn,有了这个方法可以说Hello了
Mon.prototype.fn = function() {
        cosole.log('Hello')    
}

son.fn()  // 'Hello'

           (幸福生活没过多久,老公出轨,老婆和老公离婚,老婆不想找另一个男的,厉害了自己造一个,有鼻子有眼的,让他的心一直指向老婆constructor)

function Wife( ){ 
     this.say : function(){ 
          console.log( ' 今天你也很美,比月亮还美 ' )  
  }
}

// 生一个儿子呗
var  son = new Wife()

// 新造一个老公
Mon.prototype = {
        fn : function(){
            console.log('老婆你最美')
     },
        say : '老婆最棒'// 把心永远向着老婆
       constructor : Wife
}

son.fn()  //  '老婆你最美'

吸功大法:混入式继承 + 原型链继承

function  Wife(){
      name : ' 仙女 ',
      age : 20
}

Wife.prototype.extend(obj){
      for( var key in obj ){
              if( obj.hasOwnProperty(key) ){
                      this[ key ] = obj [ key ] 
       }
       }
}

var wugong1 = {
     'qiankun': '乾坤大挪移'
}

var wugong2 = {
     'xuanming': '玄冥神掌' 
}

var son = new Wife();
son.extend(wugong1)
son.extend(wugong2)
console.log(son) // 添加了wugong1,wugong2,this指向发生了改变,指向了son这个实例对象,所以是son添加了,而不是原型添加了wugong1,wugong2

(为什么不说混入继承,混入继承就是遍历一个对象,把对象的属性一个一个赋给另一个对象,有需求的话注意深浅拷贝

最骚的继承 : 经典继承   var newObj =  Object.create( obj )  newObj是obj.contructor的实例,不是构造函数,也就是直接__proto__逆操作,骚的一P

猜你喜欢

转载自www.cnblogs.com/wchjdnh/p/10797407.html