この記事では主に ECMAScript6 - Class object の詳細な紹介を紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう
オブジェクト指向言語の特徴の 1 つは、すべての言語にクラスの概念があり、それを通じて同じプロパティとメソッドを持つ任意の数のオブジェクトを作成できることです。
ECMAScript5 にはクラスの概念がないため、そのオブジェクトはクラスベース言語のオブジェクトとは異なります。
JavaScript でオブジェクトを生成する伝統的な方法は、コンストラクターを使用することです
function Person(name, age){ this.name = name; this.age = age; this.sayHello = function(){ return "Hello "+ this.name; } } var person = new Person("dahan",18); person.sayHello(); //Hello dahan
上記の方法は、JavaScript でメソッドを宣言する形式と同じであるため、オブジェクトとメソッドの区別が明確ではなく、混乱を引き起こしやすいです。
ES6 では Class
(クラス) の概念が導入され、ES6 構文でオブジェクトを作成する場合、Java 構文と同じようにキーワード class
を使用できます。もちろん、この構文の機能は ES5 を通じても実現できます。これにより、クラスの定義がより明確になり、理解しやすくなります。 Class
(类)的概念,我们通过ES6的语法进行创建对象的时候,可以像Java语法一样,使用关键字class
,用来定义类。当然,这种语法的功能,通过ES5也都可以实现,它只是让类的定义更加清晰,更容易理解。
//类的定义 class Person { //ES6中新型构造器 constructor(name) { this.name = name; } //实例方法 sayName() { console.log("我的名字叫"+ this.name); } } //类的继承 class Programmer extends Person { constructor(name) { //直接调用父类构造器进行初始化 super(name); } program() { cosnole.log("这是我的地盘"); } } //运行测试 var person = new Person('lingxiao'); var coder = new Programmer('coder'); person.sayName(); //我的名字叫lingxiao coder.sayName(); //我的名字叫coder coder.program(); //这是我的地盘
下面来注意讲述一下上述代码中出现的语法。
constructor
constructor
是类的默认方法,就像Java中的main方法一样,每个类都必须有constructor
方法。
在通过new
实例化对象的时候,就会自动调用constructor
方法,得到的也就是constructor
返回的值。constructor
默认返回当前类的实例对象(this)
,但是我们也可以指定另外一个对象,当然,这样就会导致实例化出来的对象,并不是当前类的实例。
class Person { constructor(){ var ob = new Object(); return Ob; } sayHello(){ return "Hello World" } } var person = new Person(); person.sayHello(); //Uncaught TypeError: person.sayHello is not a function
我们在实例化对象的时候,ES6规定我使用new关键字,如果直接调用,会当成函数来调用。
class Person { constructor(name){ this.name = name; } }; var person = Person("dahan"); //Uncaught TypeError: Class constructor Person4 cannot be invoked without 'new'
this
在最开始的代码中,我们看到了this,this在类中指向的就是实例本身,但是如果我们在类的方法中使用了this,单独调用此方法的时候,就会出现错误。
class Person{ constructor(name){ this.name = name; } sayHello() { return "Hello "+this.name } } var person = new Person("dahan"); var sayHello = person.sayHello; sayHello(); //Uncaught TypeError: Cannot read property 'name' of undefined
针对这个我们可以很简单的在构造方法中绑定this
class Person{ constructor(name){ this.name = name; this.sayHello = this.sayHello.call(this); } sayHello() { return "Hello "+this.name } }
继承extend
我们想要在一个类上扩展一些属性,但又不想修改原类,就用到了继承。
//类的继承 class Programmer extends Person { constructor(name,age) { this.age = age;//报错 //直接调用父类构造器进行初始化 super(name); } program() { cosnole.log("这是我的地盘"); } }
使用继承的时候,需要用super
关键字来调用父类,super(name)
就呆逼啊调用父类的constructor
方法。
另外,我们使用的继承的时候,super
关键字也帮我们改变了this
的指向,所以我们必须要先调用super
方法,然后才能使用this
。ES6要求,子类的构造函数必须执行一次super
函数,否则就会报错。
最后
class
rrreee
constructor
はクラスのデフォルトのメソッドであり、Java の main メソッドと同様に、すべてのクラスには constructor
メソッドが必要です。 。 🎜🎜new
を通じてオブジェクトをインスタンス化する場合、constructor
メソッドが自動的に呼び出され、返される値は constructor
によって返される値です。 constructor
は、デフォルトで現在のクラス (this)
のインスタンス オブジェクトを返しますが、もちろん、別のオブジェクトを指定することもできます。これにより、インスタンス化されたオブジェクトがインスタンス化されなくなります。現在のクラスのインスタンス。 🎜rrreee🎜 オブジェクトをインスタンス化するとき、ES6 では new キーワードを使用する必要があります。オブジェクトを直接呼び出すと、関数として呼び出されます。 🎜rrreee🎜これ🎜🎜 最初のコードでは、これを確認しました。これはクラス内のインスタンス自体を指しますが、クラスのメソッドでこれを使用する場合は、これを個別にメソッドとして呼び出し、エラーが発生します。が発生します。 🎜rrreee🎜このためには、コンストラクター メソッドで this
をバインドするだけです🎜rrreee🎜Inherit extend🎜🎜クラスのいくつかのプロパティを拡張したいのですが、拡張しないため元のクラスを変更したくない場合は、継承を使用します。 🎜rrreee🎜 継承を使用する場合、super
キーワードを使用して親クラスを呼び出す必要があります。super(name)
は親クラスの constructor code> を呼び出すだけです。 >方法です。 🎜🎜さらに、継承を使用する場合、 <code>super
キーワードは this
のポインタを変更するのにも役立ちます。そのため、最初に super
メソッドを呼び出す必要があります。 this
を使用する前に。 ES6 では、サブクラスのコンストラクターが super
関数を 1 回実行する必要があります。実行しないとエラーが報告されます。 🎜🎜ついに🎜🎜 class
キーワードの登場により、JavaScript がよりオブジェクト指向言語らしく見えるようになり、より使いやすくなることを願っています。 🎜以上がECMAScript6を始めるためのClassオブジェクトの例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。