JavaScript 自學筆記23

1. JavaScript new.target 元屬性

(1). ES6提供了new.target元屬性,來檢查函數或者構造函數是否被new操作符調用。

  • 檢查函數是否被new調用:

如:function Animal(name) {

if (!new.target) { throw `Please use 'new' operator with Animal.`; };

// 如果沒有使用new操作符,將會報錯

this.name = name;

};

Animal('Cat'); // Error: Please use 'new' operator with Animal.

  • 檢查構造函數是否被new調用:

如:class Animal {

constructor(name) {

this.name = name;

console.log(new.target.name);

};};

let cat = new Animal('Cat'); // 'Animal'

2. 靜態方法

(1). ES6引入static關鍵詞來定義靜態方法

如:class Animal {

constructor(name) { this.name = name; };

get name() { return this.name; };

static greeting(){ console.log(`Hello, ${this.name}`); };

};

Animal.greeting(); // 'Hello, Animal'

(2). 在類的構造器,或實例方法中調用靜態方法的兩種語法

  • className.staticMethodName()

如:Animal.greeting(); // 'Hello, Animal'

  • this.constructor.staticMethodName()

如:let cat = new Animal('bobo');

cat.constructor.greeting(); // 'Hello, Animal'

3. 靜態屬性

與共享靜態方法相同,類的所有實例都共享靜態屬性。

(1). 使用static關鍵詞定義靜態屬性

如:class Food { static eat = 2; };

console.log(Food.eat); // 2

(2). 在構造器中調用靜態屬性的兩種語法

  • className.staticPropertyName(此語法也可以在靜態方法中調用靜態屬性)。

如:class Food { static eat = 2; };

console.log(Food.eat);

  • this.constructor.staticPropertyName

如:class Food {

static eat = 0;

constructor(name, quantity){

this.name = name;

this.quantity = quantity;

this.constructor.eat++;};

static eatCount() { return Food.eat; };

};

上一篇:JAVA的向上转型


下一篇:java 泛型机制