javascript中的繼承練習

/** 組合繼承:使用原型鏈實現對原型屬性和方法的繼承,而通過借用構造函數來實現對實例屬性的繼承*/
function Person(name,age) {
    this.name = name;
    this.age = age;
}
Person.prototype.sayName = function(name){
    console.log("sayName:",name);
};

function Sun(name,age) {
    Person.call(this,name,age);
}
Sun.prototype = new Person();//此處沒必要傳入參數,因爲這一步屬於用原型鏈的方式來實現對原型屬性和方法的繼承。如果傳入實參,
//就相當於給實例屬性賦值了。
Sun.prototype.constructor = Sun;

var instance1 = new Sun("xiaoming",18);
console.log(instance1.age);
instance1.sayName(this.name);
var instance2 = new Sun("xiaohong",19);
console.log(instance2.age);



/** 構造方法中有參數,如果創建對象調用構造方法的時候沒有傳入實參,那麼如下所示:對象的實例屬性爲undefine*/
/*function Job(job){
    this.name = job;
}
var job = new Job();
console.log(job.name);//undefined*/

/** 組合繼承是javascript中最常用的繼承方式,是將原型鏈和借用構造函數的技術結合到一起,
 *  借用構造函數的缺點是無法繼承來自原型中的屬性和方法,
 *  原型鏈的問題是原型來自實例,而實例中有實例屬性,實例屬性可能爲引用類型,所以原型中可能存在引用類型的屬性。原型中的引
 *  用類型可以被不同的實例共享,這就是問題所在。
 */























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章