var A=function(){ this.name="meili"; this.show=function(){ alert(this.color); } } var B=function(){ this.color="red" ; A.call(this)//a在 b中執行,實現了B繼承A得功能 } var C = new B(); //建立了對象A,而且克隆了函數B的全部屬性,然而B已經繼承了A,從而C也擁有了A的屬性。 C.show(); //red
補充:還有一個apply函數的繼承,原理和call函數同樣,具體請看.call()和.apply()的相同點和不一樣點。javascript
二、原型鏈實現繼承html
1)基本模式:java
function Person(name,age){ this.name=name; this.age=age; } Person.prototype.sayHello=function(){ alert("使用原型獲得Name:"+this.name); } var per = new Person("alin",21); per.sayHello(); //輸出:使用原型獲得Name:alin
解析:前4行定義了一個Person(),第5行往Person的原型鏈表上添加了sayHello的屬性函數,第8行,建立新對象per,而且該對象克隆了Person的全部屬性(sayHello是Person中的屬性了),因此,第9行就能夠直接調用了。app
2)prototype原型模式:函數
普通版:this
function Person(name){ this.name = name; } function Student(species,age){ this.species = species; this.age = age; } Student.prototype = new Person(); Student.prototype.constructor = Student; var studentalin = new Student("大學生",21); console.log(studentalin.species);//大學生
封裝版:prototype
function Person(name){ this.name = name; } function Student(species,age){ this.species = species; this.age = age; } function extend(Child,Parent){ var F = function(){}; F.prototype = Parent.prototype; Child.prototype = new F(); Child.prototype.constructor = Child; Child.uber = Parent.prototype; } extend(Student,Person); var studentalin = new Student("大學生",21); console.log(studentalin.species);//大學生
說明:這個封裝版,是YUI庫實現繼承的方法。設計
function Person(name){ this.name = name; } function Student(species,age){ this.species = species; this.age = age; } function extend(Child,Parent){ var p = Parent.prototype; var c = Child.prototype; for(var i in p){ c[i] = p[i]; } c.uber = p ; } extend(Student,Person); var studentalin = new Student("大學生",21); console.log(studentalin.species);//大學生
說明:把子對象的全部屬性都拷貝到父對象中。htm