面向?qū)ο蟮恼Z言有一個標(biāo)志,即擁有類的概念,抽象實(shí)例對象的公共屬性與方法,基于類可以創(chuàng)建任意多個實(shí)例對象,一般具有封裝、繼承、多態(tài)的特性!但JS中對象與純面向?qū)ο笳Z言中的對象是不同的,ECMA標(biāo)準(zhǔn)定義JS中對象:無序?qū)傩缘募?,其屬性可以包含基本值、對象或者函?shù)。
我們首選要了解封裝、繼承、多態(tài)又有如何特點(diǎn)
封裝:顧名思義來封裝變量和函數(shù)
封裝->特點(diǎn):高度復(fù)用,降低冗余度,更有利于模塊化編程,能夠?yàn)樽兞亢瘮?shù)提供更多的保護(hù)
繼承:子類獲得父類的屬性和方法(成員)的一種方式
繼承->方式:屬性拷貝(淺拷貝)、屬性拷貝(深拷貝)、原型鏈繼承、原型式繼承、原型鏈繼承、組合繼承
多態(tài):對于同一個操作(指令),不同的對象表現(xiàn)出不同的反應(yīng)
多態(tài)->特點(diǎn):代碼靈活高,適應(yīng)性強(qiáng)
在面向?qū)ο箝_發(fā)中要了解js面向?qū)ο?,有時會用一些屬性和方法,下面我來講一下具體的實(shí)際用法
創(chuàng)建構(gòu)造函數(shù)
function People() { this.name = "wmui"; // 公有屬性 }
構(gòu)造函數(shù)的特點(diǎn)
1.構(gòu)造函數(shù)的首字母必須大寫,用來區(qū)分于普通函數(shù)
2.內(nèi)部使用的this對象,來指向即將要生成的實(shí)例對象
3.使用new來生成實(shí)例對象
私有屬性和方法
說明:類的構(gòu)造函數(shù)里定義的function,即為私有方法
function People() { this.name = "wmui"; // 公有屬性 let country = "杭州"; let showCountry = function() { return country; } }
私有屬性和方法特點(diǎn)
1.私有方法本身是可以訪問類內(nèi)部的所有屬性(即私有屬性和公有屬性)
2.私有方法是不可以在類的外部被調(diào)用
特權(quán)方法
function People() { this.name = "wmui"; // 公有屬性 this.intro = function() { let n = this.sayName(); // 訪問公有 let c = showCountry(); // 訪問私有 console.log(`${n}來自${c}`); } }
特權(quán)方法特點(diǎn)
1.特權(quán)方法是可以在類的外部被調(diào)用的,
2.但是它可以訪問類的私有屬性,并且也是可以訪問類的公有屬性,可以勉強(qiáng)的認(rèn)為它是一種特殊的公有方法。
3.但是它與上面的公有方法的聲明與定義方式不同。特權(quán)方法必須在類的內(nèi)部聲明定義
靜態(tài)屬性和方法
People.type = "customObject"; People.getType = function() { return "customObject" }
靜態(tài)屬性和方法
1.使用靜態(tài)方法時無需實(shí)例化(即無需用new操作符)對象,便可以調(diào)用
2.對象實(shí)例不能調(diào)用對象的靜態(tài)方法
3.只能調(diào)用實(shí)例自身的靜態(tài)屬性和方法
4.這里能定義屬性是因?yàn)楹瘮?shù)也是對象, 是 Function 的實(shí)例
公有方法
People.prototype.sayName = function() { return this.name; }
公有方法特點(diǎn)
1.任何對象都有一個__proto__屬性
2.任何方法都有一個prototype屬性和___proto__屬性
3.公有方法是可以在類的外部被調(diào)用的,
4.但是它不可以訪問類的私有屬性。
5.公有方法必須在類的內(nèi)部或者外部通過類的prototype屬性添加
創(chuàng)建實(shí)列
let p = new People(); p.name = "小羊" p.intro(); // 小羊來自杭州
使用new操作符時,會自動創(chuàng)建this對象,其類型指向構(gòu)造函數(shù)
用instanceof來檢測對象類型,同時每個對象在創(chuàng)建時都自動擁有一個constructor屬性,指向其構(gòu)造函數(shù)(字面量形式或Object構(gòu)造函數(shù)創(chuàng)建的對象,指向Object,自定義構(gòu)造函數(shù)創(chuàng)建的對象則指向它的構(gòu)造函數(shù))
console.log(p instanceof === People); //true console.log(p.constructor === People); //true
總結(jié):
1.靜態(tài)屬性和方法:對象自身的屬性和方法,實(shí)例無法訪問
2.公有屬性和方法:實(shí)例繼承的屬性和方法
3.私有屬性和方法:對象外部無法訪問的屬性和方法
4.特權(quán)方法:可以訪問私有、公有屬性和方法
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/98322.html
摘要:構(gòu)造函數(shù)內(nèi)部在構(gòu)造函數(shù)內(nèi)部通過用于指向當(dāng)前對象變量添加屬性或方法此處定義的屬性和方法都是為對象自身所擁有每次通過類創(chuàng)建實(shí)例時指向的屬性都會得到相應(yīng)的創(chuàng)建私有屬性只能被私有方法和特權(quán)方法訪問私有方法在構(gòu)造函數(shù)里聲明能被私有函數(shù)特權(quán)方法訪問只能 構(gòu)造函數(shù)內(nèi)部: tips: 在構(gòu)造函數(shù)內(nèi)部通過this(用于指向當(dāng)前對象)變量添加屬性或方法,此處定義的屬性和方法都是為對象自身所擁有,每次通過類...
摘要:關(guān)于函數(shù)聲明他的一個重要特征就是函數(shù)聲明提升就是在執(zhí)行代碼之前會先讀取函數(shù)聲明這意味著可以把函數(shù)聲明放到調(diào)用他的語句的后面將聲明放到了后面關(guān)于函數(shù)表達(dá)式創(chuàng)建一個匿名函數(shù)然后賦值給一個變量函數(shù)體可以返回一個匿名函數(shù)返回的函數(shù)可以賦值給一個變量 關(guān)于函數(shù)聲明 他的一個重要特征就是函數(shù)聲明提升,就是在執(zhí)行代碼之前會先讀取函數(shù)聲明,這意味著可以把函數(shù)聲明放到調(diào)用他的語句的后面 sayHi();...
摘要:創(chuàng)建對象中,創(chuàng)建對象的基本模式有三種。因此,在設(shè)計(jì)構(gòu)造函數(shù)時,需要進(jìn)行慎重考慮。因此在中,這種問題被稱作繼承破壞封裝。靜態(tài)成員每個只有一份,直接通過類對象進(jìn)行訪問。 什么是封裝 找工作時一些公司給了offer后我就想知道真正拿到手的是多少,畢竟賦稅繁重。但各種稅也好,五險(xiǎn)一金也好我實(shí)在是弄不清楚,于是我就會在網(wǎng)上的一些稅后收入計(jì)算器上進(jìn)行計(jì)算,只需要填寫一些基本信息,比如稅前收入,所...
摘要:閉包閉包的特點(diǎn)就是內(nèi)部匿名函數(shù)可以訪問外部函數(shù)作用域的變量和方法變量對象。閉包的主要表現(xiàn)形式就是匿名函數(shù),但是兩者并不是等價(jià)的。中是沒有塊級作用域的,為了在中引入塊級作用域,可以使用匿名函數(shù)模擬塊級作用域。 在介紹閉包之前,首先解釋在隨后的測試實(shí)例中會使用的assert測試函數(shù),這個方法有別于alert()測試,有很大的改進(jìn)。 assert()測試方法 #...
閱讀 3749·2023-04-25 19:56
閱讀 1732·2021-11-12 10:36
閱讀 1849·2021-11-08 13:19
閱讀 1601·2019-08-30 14:06
閱讀 3088·2019-08-30 11:01
閱讀 1805·2019-08-29 13:23
閱讀 2795·2019-08-29 11:18
閱讀 3501·2019-08-26 13:35