面向對象的封裝、繼承、多態以及構造函數

一、面向對象特色:封裝、繼承、多態。
二、構造函數 = 構造器 + 原型對象;
(1)父類
function UserClass(name,age,word){app

//構造器 constructor
this.name=name;
this.age =age;
this.word =word;
this.init =function(){
    return `${this.name} ----init初始化`;
}

}
UserClass.prototype={函數

//原型對象 prototype 只能實例化以後才能調取
say(){
    return `${this.name}---${this.age}----${this.word}`;
}

}
module.exports = UserClass;ui

var u1 = new UserClass("大雷",18,"大家這些二傻子");
打印:大家這些二傻子 -- 大雷 -- init初始化this

(2)子類
繼承父類:call/apply 改變this指向來實現繼承,二者參數不相同,功能相同。但沒法繼承原型對象。
var UserClass=require("./userClass");
function User(name,age,word,grade){prototype

this.grade=grade;
//UserClass.call(this,name,age,word);
UserClass.apply(this,[name,age,word]);

}code

//(1)直接賦值:能夠繼承原型對象
//User.prototype = new UserClass();
//(2)對象複製:能夠繼承原型對象
//for(var i in UserClass.prototype){
// User.prototype[i] = UserClass.prototype[i];
// }對象

User.prototype={繼承

say(){    //把父類的say方法改寫叫方法重載。
return `${this.name} 說:我好累`;
},
walk(){    //添加屬於本身的方法叫多態。
    return "i am fly";
}

}
module.exports = User;ip

var u2 = new User("小明",22,"不存在的啊",100);原型鏈

補充知識點:
var person = {

username: "人類",
say: function () {
alert(this.username + "你好");

}
}

var yellowPerson = {

__proto__: person,
username: "黃種人",

};
(1)Object.prototype.username = "地球人";//能夠使用大寫的Object來實現繼承
(2)yellowPerson.constructor.prototype === Object.prototype 結果爲true
注意:yellowPerson.prototype.username = "地球人"; 普通對象不能使用原型來繼承
打印: yellowPerson.say();

普通函數的繼承call和apply:
<script>

window.username = "lili";
var person = {
    username: "leson"
function say(userage,hobby) {
    alert(this.username + "今年" + userage + "歲喜歡"+hobby);
}
say.call(person, 18,"籃球");//say裏面的this 指向call裏面的第一個參數

</script>

<script>

window.username = "lili";
var person = {
    username: "leson"
}
function say(userage,hobby) {
    alert(this.username + "今年"+userage+"歲喜歡"+hobby);
}
say.apply(person,[18,"籃球"]);//say裏面的this 指向apply裏面的第一個參數

</script>

構造函數:使用的時候用new關鍵字實例化的函數
(一、構造函數就是一個類(object) 能夠有屬性和方法 裏面的this就指向該構造函數
二、構造函數能夠經過prototype來實現繼承(補充自身擴展更多內容)
三、繼承的時候就會產生原型鏈 自身-原型-Object Object沒有就是undefined Object就是原型鏈的末端)

this的指向問題:函數屬於誰就指向誰
1 window 當函數直接調用的時候 函數名前面什麼都沒有的時候 say();
2 object 指向函數的全部者 btn.onclick = function(){ }
3 構造函數 new Say() this就指向構造函數
4 call/apply裏面的第一個參數

三種繼承方式:構造函數 使用原型普通對象 使用內部原型普通函數 使用call/apply

相關文章
相關標籤/搜索