月薪80k大佬筆記,javascript之繼承!網友:“完美”!

1.傳統方式--->原型鏈
(過多繼承了沒用的屬性)
Grand.prototype.lastname = 'zhang' function Grand(); } var grand = new Grand(); Father.prototype = grand; function Father(){ this.name = 'hehe'; } var father = new Father(); Son.prototype = Father(); function Son(){ } var son = new Son(); //son 即繼承了father的,有繼承了grand的 ,這就發生了矛盾,無論你需不需要繼承這個屬性,他都會繼承來。
2.借用建構函式
(1.不能繼承借用的建構函式的原型,2.每次建構函式都要多走一個函式,只是視覺上節省了程式碼量)
function Person(name, age, sex){ this.name = name; this.age = age; this.sex = sex; } function Student(name, age,sex,grade){ //借別人的方法去實現自己的東西,實際上沒有繼承的關係,只是用你的東西幹我自己的事情。 Person.call(this,name,age,sex); this.grade = grade; } var studet = new Student();
共有原型
Father.prototype.lastName = 'zhang'; function Father(){ } // var father = new Father(); //用原型繼承的時候,需要例項化兩個物件,但使用共有原型,就可以不用例項原型物件,直接使用建構函式的原型就可以 Son.prototype = Father.prototype; function Son(){ } var son = new Son();
可以用一個函式封裝

但這中也是有缺點的,就是你在給原型新增屬性時,因為父親和孩子都指向一個引用,改一個,另一個也會跟著變。這並不是我們想要到的,我們希望的是,我繼承你,但我自己後定義的原型不想影響你。有自定義的,有共有的。這就引出了聖盃模式
聖盃模式
通過新增一箇中間層,new Middle()出一個新物件,讓這個新物件的原型指向Father的原型,讓Son的原型等於new Middle()這個新物件,因為這個新物件是一個全新的物件,所以Son的原型等於新物件並不會影響Father的原型。樣Son既可以通過原型鏈找到Father的原型,

利用閉包私有變數寫法

最後,想學習web前端的小夥伴們!
對web前端感興趣的小夥伴也可以加 小編q 裙:853597293
