JS學習筆記 09 類 class

2021-10-10 00:08:14 字數 2500 閱讀 5933

定義乙個類user,注意類的定義中,成員之間無需逗號分隔,這點與原型不同。constructor物件指向其建構函式,this指向其實例物件本身。

class

user

}//無需逗號

getname()

}

使用new關鍵字建立乙個例項物件,constructor會在new時自動執行

let lisi =

newuser

("lisi"

);

類的本質是乙個函式物件,所以可以跟構造方法一樣使用new關鍵字呼叫其constructor建立例項物件

console.

log(user.__proto__)

// function()

所以下面的兩段**的實現效果是一樣的

class

user

getname()

}

function

user

(name)

user.prototype.

getname

=function()

類的屬性定義有如下兩種方法,可以定義在建構函式中也可以直接定義在類中,定義在類中的屬性無需使用thisfunction定義,直接使用方法簽名+()的形式,定義在

class

user

} name =

"張三"

;func3()

}

class 中定義的方法直接定義在其原型中且不能列舉

class

user

func()

}user.prototype.

func()

;// func

let pd = object.

getownpropertydescriptor

(user.prototype,

"func");

console.

log(pd.enumerable)

;// false

靜態屬性即為類設定屬性,而不是為生成的物件設定,在js中使用static關鍵字設定

class

user

;static name =

"user's name";}

let john =

newuser()

;console.

log(john.name)

;//undefined

console.

log(user.name)

;//user's name

與靜態屬性類似,指通過類訪問而不能通過例項物件訪問的方法

class

user

;static name =

"user's name"

;static

show()

}let john =

newuser()

;user.

show()

;// user's name

john.

show()

;// 報錯!! 方法不存在

使用訪問器可以對物件的屬性進行訪問控制

class

user

}set

age(value)

getage()

}let peter =

newuser

("peter",20

);peter.age =-20

;// 報錯 : 年齡不合法

使用extends關鍵字進行 繼承,super指向上一基類構造,在定義constructor時必須優先呼叫父類構造,即super()

class

preson

show()

$`);

}}class

user

extends

preson

usershow()

$$`)

;}}let user =

newuser

("張三",20

,"男");

user.

show()

;//張三 20

user.

usershow()

;//張三 20 男

C 類class 學習筆記

三看原則 1.看呼叫的成員變數是在類的內部還是類的外部 2.看兒子繼承方式 3.當前變數在兒子中的變數在父親中的訪問控制許可權 類的相容性原則 子類物件可以當做父類物件使用 子類物件可以直接賦值給父類物件 子類物件可以直接初始化父類物件 父類指標可以直接指向子類物件 父類引用可以直接引用子類物件 為...

Swift學習筆記九 類 Class

person 類沒有 初始化器 s,建構函式可以有多個,預設是 initclass person nsobject 過載 函式名相同,會是引數和個數不同 過載可以給自己的屬性從外部設定初始值 init name string class person nsobject 重寫父類的方法 overrid...

scala學習筆記09 樣例類

樣例類 樣例類使用了case關鍵字的類定義就是就是樣例類 case classes 樣例類是種特殊的類,經過優化以用於模式匹配。object case class01 定義函式分辨職務 def classify p person unit 定義父類 person class person 定義doc...