解釋JS中的靜態方法、公有方法、私有方法和特權方法

面向對象的語言有一個標誌,即擁有類的概念,抽象實例對象的公共屬性與方法,基於類能夠建立任意多個實例對象,通常具備封裝、繼承、多態的特性!但JS中對象與純面嚮對象語言中的對象是不一樣的,ECMA標準定義JS中對象:無序屬性的集合,其屬性能夠包含基本值、對象或者函數。

咱們首選要了解封裝繼承多態又有如何特色編程

封裝:顧名思義來封裝變量和函數
封裝->特色:高度複用,下降冗餘度,更有利於模塊化編程,可以爲變量函數提供更多的保護
繼承:子類得到父類的屬性和方法(成員)的一種方式
繼承->方式:屬性拷貝(淺拷貝)、屬性拷貝(深拷貝)、原型鏈繼承、原型式繼承、原型鏈繼承、組合繼承
多態:對於同一個操做(指令),不一樣的對象表現出不一樣的反應
多態->特色:代碼靈活高,適應性強模塊化


在面向對象開發中要了解js面向對象,有時會用一些屬性和方法,下面我來說一下具體的實際用法函數

建立構造函數ui

function People() {
  this.name = 'wmui'; // 公有屬性
}

構造函數的特色
1.構造函數的首字母必須大寫,用來區分於普通函數
2.內部使用的this對象,來指向即將要生成的實例對象
3.使用new來生成實例對象this


私有屬性和方法
說明:類的構造函數裏定義的function,即爲私有方法prototype

function People() {
  this.name = 'wmui'; // 公有屬性

  let country = '杭州';
  let showCountry = function() {
    return country;
  }
}

私有屬性和方法特色
1.私有方法自己是能夠訪問類內部的全部屬性(即私有屬性和公有屬性)
2.私有方法是不能夠在類的外部被調用code


特權方法對象

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.特權方法:能夠訪問私有、公有屬性和方法

相關文章
相關標籤/搜索