アウトライン
ES6において、クラス(カテゴリ)はクラスキーワードクラスで定義されたテンプレートオブジェクトとして導入されます。
これは、クラスの本質である機能。
これは、オブジェクト指向プログラミングの構文のように、そのようにされたオブジェクトのプロトタイプの文言がより明確に、シンタックスシュガーとして見ることができます。
クラスの使用
小demo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
//1、创建类 class 创建一个 明星的类
class Star {
//类的共有属性写在constructor
constructor(username,age){
this.username = username;
this.age = age;
}
// 在类中添加共有的方法(函数)
sing(song){
console.log(this.username+"和"+song)
}
//类里面所有的函数不需要写function
// 多个函数方法之间不需要添加逗号分隔
}
//2、利用类创建对象 new
var llj = new Star('张杰',18)
var wj = new Star('郑爽',16)
console.log(llj);
console.log(wj);
llj.sing("王力宏");
wj.sing("那英")
</script>
</body>
</html>
要約:
- クラスを作成するには、classキーワードは、クラス名は大文字で最高です。
- クラスは、インスタンスオブジェクトに渡されたパラメータとリターンを受信することができるコンストラクタ関数を有しています。(この点は、新しいインスタンスです)
- 限りコンストラクタ関数は、新しいインスタンスを生成することであるとして、それは自動的に私たちは、この関数を書いていない場合、クラスは自動的にこの関数を生成し、クラス内のこの関数を呼び出します。
- 新世代の例には、省略することができません。
- 最後に、ノートその構文仕様、括弧の増加の後ろにクラス名のインスタンスを生成し、括弧を追加しないクラス名に続いてクラスを作成し、コンストラクタは、機能を追加する必要はありません
クラスの継承
現実の継承では:継承された彼の父、子供は父親の姓を継承しています。
相続手続:サブクラスは、親クラスの属性とメソッドを継承します。
キーワード拡張
構文:
<script>
// 父类 Father
class Father{
// 父类
}
// 通过 extends 关键字继承
// 子类 Son
class Son extends Father{
//子类继承父类
}
</script>
例:
// 父亲类 Father
class Father {
constructor(){
}
money(){
console.log("我有1000元")
}
}
//子类 Son 通过 extend 继承 Father
class Son extends Father{}
var son = new Son();
console.log(son.money());// 我有1000元
superキーワード
スーパーキーワードは、オブジェクトの親にアクセスし、コール機能に使用されています。あなたは、親クラスのコンストラクタを呼び出すことができます、また、親クラスの正常な機能を呼び出すことができます。
構文:
class Father{
say(){
return '我是father';
}
}
class Son extends Father{ // 子类继承了父类的属性和方法
say(){
//super.say() // super 调用父类的普通方法
return super.say() + '的son';
}
}
var damao = new Son();
console.log(damao.say());//我是father 的son
例:
class Father{
constructor(x,y){
//这里的this 指向是自己的constructor
this.x = x;
this.y = y;
}
sum(){
console.log(this.x + this.y);
}
}
class Son extends Father{
constructor(x,y){
//这里的this 指向是自己的constructor,不能被父类接收
//this.x = x;
// 所以需要用到super关键字,调用父类里面的构造函数constructor
//super关键字必须放到this 前面
super(x,y);
this.x = x;
this.y = y;
}
sub(){
console.log(this.x - this.y);
}
}
var son = new Son(5,3);
son.sum(); // 8
son.sub(); //2
要約:
- 原則を見つけるために、プロパティやメソッドを継承する:近接の原則
- インスタンス化可能サブクラスは、出力の方法を継承する場合は最初のサブクラスならば実行されたように、この方法のサブクラスでは全く見は、ありません。
- 継承、子は親クラスの内部の実装にいるかのように、親クラスのメソッドかどうかを見つけるために、クラスに行っていない場合。
- コンストラクタのスーパーでのサブクラスは、この目の前に置かなければなりません(あなたが最初のコンストラクタサブクラスこと、その後、スーパークラスのコンストラクタを呼び出す必要があります)