您好,登錄后才能下訂單哦!
小編給大家分享一下JavaScript借用構造函數繼承的方法,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
借用構造函數繼承是在子類型構造函數的內部調用超類型構造函數,通過使用apply()和call()方法
function girlFriend(){ this.girls = ['chen','wang','zhu']; } function Person(){ girlFriend.call(this,20); } var wang = new Person(); var zhu = new Person(); wang.girls.push('zhang'); console.log(wang.girls); //(4) ["chen", "wang", "zhu", "zhang"] console.log(zhu.girls); //(3) ["chen", "wang", "zhu"]
通過以上代碼,我們可以發現,在原型鏈繼承中出現的問題不再出現了,這個超類不會被子類所創建的實例共享了。
借用構造函數繼承的優勢是可以在子類型構造函數中向超類型構造函數傳遞參數,例如以下代碼:
function SuperType(name){ this.name = name; } function SubType(){ SuperType.call(this,"nick"); this.age = 20; } var instance = new SubType(); console.log(instance.name); //nick console.log(instance.age); //20
借用構造函數繼承的問題:用構造函數繼承并不能繼承到超類型原型中定義的方法,例如以下代碼,在girlFriends構造函數的原型中添加sayHello方法:
girlFriend.prototype.sayHello = function(){ console.log('hello'); }
繼承它的子類構造函數的實例并不能調用到這個sayHello方法,返回的值是undefined
看完了這篇文章,相信你對“JavaScript借用構造函數繼承的方法”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。