1. 程式人生 > >JS中對象的特征:繼承

JS中對象的特征:繼承

所有 對象 屬性 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中對象的特征:繼承