摘要:構(gòu)造類以及繼承構(gòu)造函數(shù)方法該種方式下的繼承封裝一個函數(shù)綁定復(fù)制繼承對象創(chuàng)建方法類的實現(xiàn)該種方式下的繼承極簡主義法實現(xiàn)一個類睡覺睡覺類的私有屬性和方法在方法中,只要不是定義在對象上的方法和屬性,都是私有的該變量只能通過公有方法來讀取類的數(shù)據(jù)共
構(gòu)造類以及繼承 構(gòu)造函數(shù)方法
function Person(name) { this.name = name } Person.prototype.species = "human" Person.prototype.sayName = { alert(this.name) } let person = new Person() person.sayName()
該種方式下的繼承
(1)封裝一個函數(shù)
function extend (child, Parent) { let F = function(){} F.prototype = Parent.prototype child.prototype = new F() child.prototype.constructor = child } function Man (name) {this.name = name} extend(Man, Person) let man1 = new Man("ziv") console.log(man1.species) // human
(2)綁定
function Man () { Person.call(this, arguments) // call,apply,bind }
(3)復(fù)制繼承
function Man () {} for (let prop in Person.prototype) { // Man.prototype[prop] = Person.prototype[prop] } Man.prototype.constructor = Man對象創(chuàng)建方法
let Person = { name: "michal", sayName: function() { alert(this.name) } } let person = Object.create(Person) person.sayName()class類的實現(xiàn)
class Point { constructor(x, y) { this.x = x this.y = y } toString() { return `( ${this.x} ,${this.y} )` } }
該種方式下的繼承
class micPoint extends Point(x, y, z) { constructor() { super(x, y) this.z = z } toString () { return this.z + "" + super.toString() } } let point = new Point(2, 3)極簡主義法
實現(xiàn)一個類
let Animal = { createNew: function() { let animal = {} animal.name = "animal" animal.sleep = function() {console.log("睡覺")} return animal } } let animal1 = Animal.createNew() animal1.sleep() // 睡覺
類的私有屬性和方法
let Cat = { createNew: function() { let cat = {} // 在createNew()方法中,只要不是定義在cat對象上的方法和屬性,都是私有的 let sound = "miaomiao" // 該sound變量只能通過公有方法makeSound()來讀取 cat.makeSound = function (){console.log(sound)} return cat } } let cat2 = Cat.createNew() console.log(cat2.sound) // undefined
類的數(shù)據(jù)共享
let Cat = { sound: "喵喵" createNew: function(){ let cat = {} cat.makeSound = function(){console.log(Cat.sound)} cat.changeSound = function(x){Cat.sound = x} return cat } } let cat1 = Cat.createNew() let cat2 = Cat.createNew() cat1.makeSound() // 喵喵 cat2.changeSound("汪汪") // 修改了共享的數(shù)據(jù),另一個實例對象也會受到影響 cat1.makeSound() // 汪汪
該種方式下的繼承實現(xiàn)
let Cat = { createNew: function() { let cat = Animal.createNew() cat.name = "miao" cat.makeSound = function () {console.log("喵喵")} return cat } } let cat1 = Cat.createNew() // 該實例會繼承Cat和Animal類 cat1.sleep() // 睡覺
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/84688.html
摘要:首先捋清楚類和對象的關(guān)系類比如人類,指的是一個范圍對象比如某個人,指的是這個范圍中具體的對象中的作為構(gòu)造函數(shù)時,就是一個類,通過操作符,可以返回一個對象。 JS中的類與類的繼承 我們知道,JS中沒有類或接口的概念,即不能直接定義抽象的類,也不能直接實現(xiàn)繼承。不過,為了編程的方便,我們可以在 JS 中模擬類和繼承的行為。首先捋清楚類和對象的關(guān)系: 類:比如人類,指的是一個范圍; ...
摘要:前言是面對對象的語言,因此有必要單獨紀(jì)錄下對象的各種定義和理解。面對對象基本概述概述是基于面向過程的變成思想,是對面向過程的一種封裝。面對對象開發(fā)就是不斷的創(chuàng)建對象,使用對象,指揮對象做事情。面對對象設(shè)計其實就是在管理和維護(hù)對象之間的關(guān)系。 前言 java是面對對象的語言,因此有必要單獨紀(jì)錄下對象的各種定義和理解。 面對對象,主要包括:面向?qū)ο笏枷?,類與對象及其使用,對象的內(nèi)存圖,成...
摘要:前言自從進(jìn)入版本以來,開始全面地支持面向?qū)ο缶幊獭:昧?,進(jìn)入正題,面向?qū)ο蟮娜筇匦苑謩e是封裝性,繼承性以及多態(tài)性,使用面向?qū)ο箝_發(fā),讓我們的程序可維護(hù)以及擴(kuò)展性大大提高。 showImg(https://segmentfault.com/img/remote/1460000012257579?w=1920&h=1080); 前言 自從php進(jìn)入5.0版本以來,PHP開始全面地支持面向...
摘要:案例演示抽象類的成員特點抽象類的成員方法特性抽象方法強(qiáng)制要求子類做的事情。抽象類中定義的是該繼承體系的共性功能。 1.多態(tài)的概述及其成員訪問特點代碼體現(xiàn) A:多態(tài)(polymorphic)概述 事物存在的多種形態(tài) B:多態(tài)前提- 1.要有繼承關(guān)系 2.要有方法重寫 3.要有父類引用指向子類對象。 C:多態(tài)中的成員訪問特點之 成員變量:編譯和運(yùn)行都看父類。 成員方法:編...
摘要:引申意義子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。含義當(dāng)子類的方法實現(xiàn)父類的方法時重寫重載或?qū)崿F(xiàn)抽象方法,方法的后置條件即方法的輸出返回值要比父類更嚴(yán)格或相等。優(yōu)點約束繼承泛濫,開閉原則的一種體現(xiàn)。降低需求變更時引入的風(fēng)險。 0x01.開閉原則 定義:一個軟件實體如類,模塊和函數(shù)應(yīng)該對擴(kuò)展開放,對修改關(guān)閉 要點: 當(dāng)變更發(fā)生時,不要直接修改類,而是通過繼承擴(kuò)展的方式完成變...
閱讀 1029·2021-11-24 09:39
閱讀 3470·2021-10-27 14:20
閱讀 2373·2019-08-30 14:08
閱讀 3442·2019-08-29 16:34
閱讀 2250·2019-08-26 12:14
閱讀 2162·2019-08-26 11:54
閱讀 2842·2019-08-26 11:44
閱讀 2533·2019-08-26 11:38