Class類的特性(上)

2022-04-01 19:00:05 字數 2105 閱讀 2722

class類的特性(上)

es6 的類,完全可以看作es5建構函式的另一種寫法。

class

point

typeof point //

"function"

point === point.prototype.constructor //

true

上面**表明,類的資料型別就是函式,類本身就指向建構函式。

建構函式的prototype屬性,在 es6 的「類」上面繼續存在。事實上,類的所有方法都定義在類的prototype屬性上面。

class

point

tostring()

tovalue() }//

等同於point.prototype =,

tostring() {},

tovalue() {},

};object.assign只拷貝當前那一層的基本資料型別

let target = ;

let source1 = ;

let source2 = };

let obj =object.assign(target, source1, source2);

console.log(obj) //}

obj.data.ff //

1source2 .data.ff="

fffffffff

"console.log(obj) //}

obj.data.ff //

"fffffffff"

類不顯式定義constructor的話,引擎會自動加。

類必須new呼叫,而建構函式可以直接呼叫。

constructor方法預設返回例項物件(即this),完全可以指定返回另外乙個物件。

class

foo

}new

foo() instanceof foo

//false

上面**中,constructor函式返回乙個全新的物件,結果導致例項物件不是foo類的例項。

與 es5 一樣,例項的屬性除非顯式定義在其本身(即定義在this物件上),否則都是定義在原型上(即定義在class上)。

//定義類

class

point

tostring()

}var point = new point(2, 3

);point.tostring()

//(2, 3)

point.hasownproperty('x

') //

true

point.hasownproperty('

y') //

true

point.hasownproperty('

tostring

') //

false

point.__proto__.hasownproperty('

tostring

') //

true

上面**中,x和y都是例項物件point自身的屬性(因為定義在this變數上),所以hasownproperty方法返回true,而tostring是原型物件的屬性(因為定義在point類上),所以hasownproperty方法返回false。這些都與 es5 的行為保持一致。

由於本質上,es6 的類只是 es5 的建構函式的一層包裝,所以函式的許多特性都被class繼承,包括name屬性。

name屬性總是返回緊跟在class關鍵字後面的類名。

總結:類中的方法能被例項繼承。

類中的this指向例項。

static方法(靜態方法):不能被例項呼叫,只能被類呼叫。父類中的static方法,能被子類繼承。

static方法中的this指向類。

例項屬性:之前一般在constructor()方法裡面定義。現在直接與例項方法同級定義。(例項屬性的新寫法)

靜態屬性:

static prop = 1

;新寫法,直接在前加static。只能被類呼叫。

私有方法和私有屬性:是只能在類的內部訪問的方法和屬性,外部不能訪問。(作用域影響)

私有屬性和私有方法:目前是提案,是前面加# 如:#a。

Class類的使用

萬事萬物皆物件。類也是物件,是class類的例項物件,稱為該類的 類型別 通過乙個例子說明3種表示類型別的方法,以及用類型別建立類物件 class foo public class classdemo catch classnotfoundexception e system.out.println...

令人振奮的Class 上

可以在這裡測試 es2015中定義類 clss me 例項化類 let m new me console.log m.showname 類中屬性的使用 class me 例項化類 let m new me m.showname 這裡就定義了age alert m.age 18構造方法 class m...

令人振奮的Class 上

可以在這裡測試 es2015中定義類 clss me 例項化類 let m new me console.log m.showname 類中屬性的使用 class me 例項化類 let m new me m.showname 這裡就定義了age alert m.age 18構造方法 class m...