您好,登錄后才能下訂單哦!
這篇文章主要介紹“Javascript怎么實現繼承”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Javascript怎么實現繼承”文章能幫助大家解決問題。
1、構造函數模式
[url=]file:///C:/Users/i037145/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif[/url]
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
varperson1 = new Person("Nicholas",29,"Software Engineer");
varperson2 = new Person("Greg",27,"Doctor");
person1.sayName();//"Nicholas"
person2.sayName();//"Greg"
alert(person1.constructor == Person);//true
alert(person2.constructor == Person);//true
alert(person1 instanceof Object);//true
alert(person1 instanceof Person);//true
alert(person2 instanceof Object);//true
alert(person2 instanceof Person);//true
[url=]file:///C:/Users/i037145/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif[/url]
問題:
每個方法都要在每個實例上重新創建一遍。在前面的例子中,person1和person2都有一個名為sayName()的方法,但那兩個方法不是同一個Function的實例。
alert(person1.sayName ==person2.sayName);//false
然而,創建兩個完成同樣任務的Function實例的確沒有必要;況且有this對象在,根本不用在執行代碼前就把函數綁定到特定對象上面。因此,可以通過把函數定義轉移到構造函數外部來解決這個問題:
[url=]file:///C:/Users/i037145/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif[/url]
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName;
}
functionsayName(){
alert(this.name);
}
varperson1 = new Person("Nicholas",29,"Software Engineer");
varperson2 = new Person("Greg",27,"Doctor");
alert(person1.sayName == person2.sayName);//true
[url=]file:///C:/Users/i037145/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif[/url]
問題:在全局作用域中定義的函數實際上只能被某個對象調用,這讓全局作用域有點名不副實。更讓人無法接受的是:如果對象需要定義很多方法,那么就要定義很多個全局函數,于是我們這個自定義的引用類型就絲毫沒有封裝性可言了。
2、原型模式
3、組合使用構造函數模式和原型模式
4、原型鏈
5、組合繼承
6、原型式繼承
7、寄生式繼承
8、寄生組合式繼承
9、拷貝組合式繼承
關于“Javascript怎么實現繼承”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。