JS中對象的特征:繼承
阿新 • • 發佈:2018-06-11
所有 對象 屬性 anim intro 原型鏈 pro 舌頭 dog
子類沿用父類的屬性和方法來達到重用,並且子類可以擴展自己的屬性和方法 2.1繼承方法 2.1.1對象冒充法 優點:可以繼承屬性 缺點:不可以繼承方法,檢測類型可以發現子類不在父類中 強制繼承 js 先定義子類對象,然後再對象中寫 this.inherit = 父類對象名 this.inherit(參數一,參數二,參數三...) delete this inherit; call/apple冒充法 js 先定義子類對象,然後再對象中寫 父類對象名.apply(this,[參數1,參數2...]); 父類對象名.call(this,參數1,參數2..) 2.2原型鏈 優點:可以繼承方法,檢測類型可以發現子類在父類中 缺點:獲取不到屬性 子類名.prototype= new 父類對象名(); 2.3混合方式 結合原型鏈和對象冒充法,既可以獲取到屬性,也可以繼承方法,檢測類型也可以發現子類在父類中 定義一個子類對象,對象中用對象冒充法繼承到父類屬性 然後用原型鏈繼承到父類方法 看原型 子類對象名.prototype(只能找上一級) 子類對象名.proto(可以一直往上找) 示例: //父類動物 function Animal(name,color,male) { this.name = name; this.color = color; this.male = male; } Animal.prototype.intro = function() { console.log("I am animal"); } //子類貓 function Cat(name,color,male) { Animal.apply(this,["咪咪","黑白色","雄"]); //繼承父類的屬性 } Cat.prototype = new Animal(); //原型鏈繼承父類的方法 Cat.prototype.itself = function () { console.log("I am cat,怕水,舌頭有倒刺"); } //子類自己的方法要寫在繼承父類方法的後面 let cat = new Cat(); console.log(cat.name,cat.color,cat.male); cat.itself(); cat.intro();//子類狗 function Dog(name,color,male) { Animal.apply(this,["汪汪","黑白色","雄"]); } Dog.prototype = new Animal(); Dog.prototype.itself = function () { console.log("I am dog,不怕水,舌頭沒倒刺"); } let dog = new Dog(); console.log(dog.name,dog.color,dog.male); dog.itself(); dog.intro(); console.log(Dog.prototype); console.log(Dog.prototype.prototype); console.log(Cat.__proto__); console.log(Cat.__proto__.__proto__); console.log(Cat.__proto__.__proto__.__proto__); //咪咪 黑白色 雄 i am cat ,怕水,舌頭有倒刺 i am animal 汪汪 黑白色 雄 i am dog, 不怕水,舌頭沒倒刺 i am animal //看原型 Animal { name: undefined, color: undefined, male: undefined, itself: [Function] } undefined [Function]//所有函數的__proto__都指向function {}//在往上就是空對象 null//再往上就是null這是最上一級,不能在往上了
JS中對象的特征:繼承