當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript_原型链继承
生活随笔
收集整理的這篇文章主要介紹了
JavaScript_原型链继承
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.原型鏈繼承
<script type="text/javascript">function Supper() {this.supProp = "Supper"}Supper.prototype.showSupperProp = function () {console.log(this.supProp)}function Sub() {this.subProp = "Sub"}Sub.prototype.showSubProp = function () {console.log(this.subProp)}//子類的原型等于父類的實例對象//想看到誰的實例的方法就等于誰的實例//以前是Sub.prototype = new Object() /{}Sub.prototype = new Supper()//讓子類型的原型的contructor指向子類型Sub.prototype.constructor = Subvar s = new Sub()s.showSupperProp() </script>
下面的圖為內(nèi)存的圖
Supper和Sub都創(chuàng)造了其函數(shù)對象和對應(yīng)的實例對象Object,由于
這句話即創(chuàng)造了Supper的實例對象也使得Sub的函數(shù)對象指向了Supper的實例對象,然后原來Sub函數(shù)對象指向的Object實例對象就成了廢棄的。
下面的
Sub.prototype.constructor = Sub是為了使得子類型的原型的contructor指向子類型
不然就會引發(fā)一些不必要的錯誤
2.借用構(gòu)造函數(shù)繼承
這是假的繼承,其實沒有繼承,只是為了獲取其屬性
function person(name, age) {this.name = namethis.age = age}function student(name, age, price) {person.call(this, name, age)this.price = price}//無繼承var s = new student("tom", 22, 100)console.log(s.name, s.age, s.price)通過call的方法獲取其屬性
但是實際上沒有發(fā)生繼承關(guān)系
3.組合繼承
組合繼承就是結(jié)合了上面兩個繼承
function person(name, age) {this.name = namethis.age = age}person.prototype.setName = function (name) {this.name = name}function student(name, age, price) {person.call(this, name, age)//為了得到屬性this.price = price}student.prototype = new person()//為了看到父類型的方法student.prototype.constructor = studentstudent.prototype.setPrice = function (price) {this.price = price}既獲取了其中的屬性又發(fā)生了繼承。
所以組合繼承為最妙的一種繼承關(guān)系
總結(jié)
以上是生活随笔為你收集整理的JavaScript_原型链继承的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flex 做的小相册+向上滚动字体
- 下一篇: gradle idea java ssm