摘要:面向對象特點封裝繼承多態。直接賦值可以繼承原型對象對象復制可以繼承原型對象把父類的方法改寫叫方法重載。說我好累添加屬于自己的方法叫多態。
1、面向對象特點:封裝、繼承、多態。
2、構造函數 = 構造器 + 原型對象;
(1)父類
function UserClass(name,age,word){
//構造器 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;
var u1 = new UserClass("大雷",18,"你們這些二傻子");
打印:你們這些二傻子 -- 大雷 -- init初始化
(2)子類
繼承父類:call/apply 改變this指向來實現繼承,兩者參數不相同,功能相同。但無法繼承原型對象。
var UserClass=require("./userClass");
function User(name,age,word,grade){
this.grade=grade; //UserClass.call(this,name,age,word); UserClass.apply(this,[name,age,word]);
}
//(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;
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:
window.username = "lili"; var person = { username: "leson" function say(userage,hobby) { alert(this.username + "今年" + userage + "歲喜歡"+hobby); } say.call(person, 18,"籃球");//say里面的this 指向call里面的第一個參數
window.username = "lili"; var person = { username: "leson" } function say(userage,hobby) { alert(this.username + "今年"+userage+"歲喜歡"+hobby); } say.apply(person,[18,"籃球"]);//say里面的this 指向apply里面的第一個參數
構造函數:使用的時候用new關鍵字實例化的函數
(1、構造函數就是一個類(object) 可以有屬性和方法 里面的this就指向該構造函數
2、構造函數可以通過prototype來實現繼承(補充自身擴展更多內容)
3、繼承的時候就會產生原型鏈 自身-原型-Object Object沒有就是undefined Object就是原型鏈的末端)
this的指向問題:函數屬于誰就指向誰
1 window 當函數直接調用的時候 函數名前面什么都沒有的時候 say();
2 object 指向函數的所有者 btn.onclick = function(){ }
3 構造函數 new Say() this就指向構造函數
4 call/apply里面的第一個參數
三種繼承方式:
構造函數 使用原型
普通對象 使用內部原型
普通函數 使用call/apply
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106118.html
摘要:實現多態的三個必要條件繼承在多態中必須存在有繼承關系的子類和父類。參考面試題解惑系列九繼承多態重載和重寫面向對象三大特性封裝,繼承,多態以及抽象接口的介紹 版權聲明:本文由吳仙杰創作整理,轉載請注明出處:https://segmentfault.com/a/1190000009141566 1. 面向對象編程的三大特性 Java 面向對象編程有三大特性:封裝、繼承、多態。 1.1 封裝...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:會造成內存浪費的問題構造函數繼承聲明父類聲明子類生成實例組合式繼承組合式繼承是汲取了兩者的優點,既避免了內存浪費,又使得每個實例化的子類互不影響。 寫在前面 既然是淺談,就不會從原理上深度分析,只是幫助我們更好地理解... 面向對象與面向過程 面向對象和面向過程是兩種不同的編程思想,剛開始接觸編程的時候,我們大都是從面向過程起步的,畢竟像我一樣,大家接觸的第一門計算機語言大概率都是C語...
閱讀 3499·2023-04-25 15:52
閱讀 581·2021-11-19 09:40
閱讀 2573·2021-09-26 09:47
閱讀 1023·2021-09-22 15:17
閱讀 3548·2021-08-13 13:25
閱讀 2200·2019-08-30 15:56
閱讀 3460·2019-08-30 13:56
閱讀 2095·2019-08-30 11:27