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