1638075600
JavaScriptは、オブジェクトを作成するための複数の方法を提供します。これらの方法には、オブジェクトリテラル、、Object()
クラス、およびコンストラクター関数が含まれます。このチュートリアルでは、3番目のオプションを示します。コンストラクター関数とは何か、それらがどのように機能するか、およびそれらを使用してオブジェクトを作成する方法について学習します。
JavaScriptでは、オブジェクトの作成に使用できる方法が複数あります。使用できる最も簡単なツールは、オブジェクトリテラル、new Object()
またはObject.create()
です。しかし、もっと違うものが必要な場合はどうでしょうか。他の同様のオブジェクトを作成するための青写真またはレシピとして使用できるオブジェクトを作成するとどうなりますか?
すべて同じプロパティを持つオブジェクトをいくつか作成したいとします。おそらくメソッドも作成します。あなたは間違いなくこのオブジェクトをリテラルにすることができます。ただし、多くのコードをコピーする必要があります。または、オブジェクトの不要なクローンを作成する必要がありますが、これは予測できない場合があります。
もう1つのオプションは、「コンストラクター」と呼ばれるものを作成することです。このコンストラクターには、さまざまなプロパティとメソッドを含めることができ、それを使用して新しいオブジェクトを作成できます。このコンストラクターで作成する各オブジェクトには、コンストラクターで定義されたすべてのプロパティとメソッドもあります。これにより、時間とコードを大幅に節約できます。
このコンストラクターを作成する1つの方法は、ES6で導入されたJavaScriptクラスを使用することです。もう1つのオプションは、「コンストラクター関数」と呼ばれるものを使用することです。このコンストラクター関数とは何か、それらがどのように機能するか、そしてそれらを使用してオブジェクトを作成する方法を見てみましょう。
コンストラクター関数の構文は単純で単純です。これは、JavaScript関数を知っている場合に特に当てはまります。これら2つの構文はほとんど同じです。すべてのコンストラクター関数はfunction
キーワードで始まります。以下は、コンストラクター関数の名前の名前です。
コンストラクター関数の名前は大文字で始める必要があります。これは必須ではありませんが、一般的な規則であり、優れた方法です。ただし、小文字を使用すると機能します。次はパラメータ付きの括弧です。パラメータを指定したくない場合でも、とにかく括弧を含める必要があります。
最後は、パラメーター付きの括弧の後に続く関数本体です。この本体は、コンストラクターのプロパティとメソッドを指定する場所です。このコンストラクターを使用して新しいオブジェクトを作成すると、すべてのオブジェクトにこれらのプロパティとメソッドが含まれます。
// Syntax of a constructor function:
// - function keyword
// - name of the constructor function
// - parameters for constructor function
// - body of the constructor function
function MyConstructorFunc(param) {
// Function constructor body.
}
コンストラクター関数を作成することは1つのことです。それらを使用して新しいオブジェクトを作成することも別の方法です。幸いなことに、これを行う方法は1つしかありません。コンストラクター関数を使用して新しいオブジェクトを作成する場合は、new
キーワードを使用します。このキーワードの後には、コンストラクター名と括弧のセットが続きます。
コンストラクターがパラメーターを受け入れる場合は、括弧内に必要な引数を渡します。それ以外の場合は、空のままにします。通常、これは、新しいオブジェクトを変数に割り当てるとともに行います。コンストラクター関数を使用して、必要な数のオブジェクトを作成できることを忘れないでください。
// Create constructor function:
function Person() {}
// Create object with Person constructor:
const personOne = new Person()
// Create another object with Person constructor:
const personTwo = new Person()
コンストラクター関数でのプロパティとメソッドの定義は簡単です。とはいえ、覚えておかなければならないことが1つあります。プロパティまたはメソッドを定義する場合は、this
キーワードを使用する必要があります。let
、const
またはvar
を使用しないでください。変数ではなく、プロパティを定義しようとしています。
したがって、左側で、this
キーワードから始めて、プロパティの名前を指定します。.
これら2つの間にドット()を追加します。右側で、プロパティの値を定義すると完了です。メソッドを定義する場合、プロセスはほとんど同じです。また、this
キーワードに続けてメソッド名を使用する必要があります。
唯一の違いは右側にあります。ここでは、function
キーワードを使用する必要があります。これにより、関数を定義することがJavaScriptに通知されます。通常の関数の代わりに矢印関数を使用することもできます。コンストラクターメソッドを定義すると、コンストラクター内に既に存在する任意のプロパティにアクセスできます。
プロパティにアクセスし、正しく参照するには、this
キーワードを使用する必要があります。this
この場合には、コンストラクタ関数自体の基準となります。だから、this
基本的にはのようconstructorFunctionItself
です。
// Create constructor function:
function Person() {
// Define properties "name" and "age":
this.name = 'Anonymous'
this.age = 35
// Define method "getName" that returns a short message:
this.getName = function() {
// "this" here refers to the "Person" constructor.
// "this.name" is like "Person.name".
return `Hello, my name is ${this.name}.`
}
}
// Create object with Person constructor:
const personOne = new Person()
// Log the value of "name":
console.log(personOne.name)
// Output:
// 'Anonymous'
// Log the "getName" message:
console.log(personOne.getName())
// Output:
// 'Hello, my name is Anonymous.'
// Create another object with Person constructor:
const personTwo = new Person()
// Log the value of "name":
console.log(personTwo.name)
// Output:
// 'Anonymous'
// Log the "getName" message:
console.log(personTwo.getName())
// Output:
// 'Hello, my name is Anonymous.'
コンストラクター関数を定義するときに、コンストラクター関数内でのみプロパティとメソッドを定義することは1つのオプションです。別のオプションは、コンストラクターが作成された後、それらをその外部で定義することです。この場合、prototypeというプロパティを使用します。これは、JavaScriptのすべての関数が持つ特別なプロパティです。
このprototype
プロパティは、コンストラクター関数で定義されたすべてのプロパティとメソッドを含むオブジェクトです。constructor
プロパティも含まれています。このプロパティは、現在作業しているコンストラクターを指します。このプロパティを使用すると、プロパティとメソッドをコンストラクターに追加、変更、または削除できます。
// Create constructor function:
function Person() {
// Define properties "name" and "age":
this.name = 'Anonymous'
this.age = 35
}
// Create object with Person constructor:
const personOne = new Person()
// Create another object with Person constructor:
const personTwo = new Person()
// Add properties to Person constructor using prototype:
Person.prototype.gender = 'female'
Person.prototype.height = 1.7
// Log the value of "gender" on "personOne" object:
console.log(personOne.gender)
// Output:
// 'female'
// Log the value of "height" on "personTwo" object:
console.log(personTwo.height)
// Output:
// 1.7
// Add method "getName" to Person constructor using prototype:
Person.prototype.getName = function() {
// "this" here will correctly refer to the Person constructor.
// So, "this.name" will again basically become "Person.name".
return `Hello, my name is ${this.name}.`
}
// Log the message:
console.log(personTwo.getName())
// Output:
// 'Hello, my name is Anonymous.'
注意事項prototype
:上記の例でわかるように、覚えておくべきことが1つあります。プロトタイプを介してコンストラクターにプロパティまたはメソッドを追加する場合、そのコンストラクターで既に作成されているすべてのオブジェクトにも追加します。
プロパティまたはメソッドを追加したい場合がありますが、すべてではなく1つのオブジェクトにのみ追加します。この場合、prototype
プロパティまたはメソッドがどこにでも追加されるため、はオプションではありません。代わりにできることは、プロパティまたはメソッドを特定のオブジェクトに直接追加することです。たとえば、ドット表記を使用します。
この後、手元のオブジェクトのみがその新しいプロパティまたはメソッドを持ちます。同じコンストラクターで作成された他のオブジェクトはそうではありません。これは、プロパティまたはメソッドを通常のオブジェクトに追加するために使用する方法です。コンストラクターで作成されたすべてのオブジェクトはオブジェクトです。したがって、これはここでも機能します。
// Create constructor function:
function Person() {
// Define properties "name" and "age":
this.name = 'Anonymous'
this.age = 35
}
// Create object with Person constructor:
const personOne = new Person()
// Create another object with Person constructor:
const personTwo = new Person()
// Add property "gender" only to "personOne" object:
personOne.gender = 'female'
// Add property "height" only to "personTwo" object:
personTwo.height = 1.7
// Log the value of "gender" on "personOne" object:
console.log(personOne.gender)
// Output:
// 'female'
// Log the value of "height" on "personOne" object:
console.log(personOne.height)
// Output:
// undefined // <= this is correct, height exists only on personTwo
// Log the value of "gender" on "personTwo" object:
console.log(personTwo.gender)
// Output:
// undefined // <= this is correct, gender exists only on personOne
// Log the value of "height" on "personTwo" object:
console.log(personTwo.height)
// Output:
// 1.7
// Add "getGender()" method only to "personOne" object:
personOne.getGender = function() {
return `I am a ${this.gender}.`
}
// Add "getHeight()" method only to "personTwo" object:
personTwo.getHeight = function() {
return `I am ${this.height}m tall.`
}
// Call the "getGender()" method on "personOne" object:
console.log(personOne.getGender())
// Output:
// 'I am a female.'
// Call the "getHeight()" method on "personOne" object:
console.log(personOne.getHeight())
// Output:
// TypeError: personOne.getHeight is not a function
// Call the "getGender()" method on "personTwo" object:
console.log(personTwo.getGender())
// Output:
// TypeError: personTwo.getGender is not a function
// Call the "getHeight()" method on "personTwo" object:
console.log(personTwo.getHeight())
// Output:
// 'I am 1.7m tall.'
オブジェクトの青写真を作成するオプションは素晴らしいです。これまで、すべてのデータが静的で変更できないコンストラクターの例を見てきました。これが唯一の方法という意味ではありません。最初に、構文について説明したときに、パラメーターについて簡単に説明しました。
これは、コンストラクター関数をより動的にする方法です。通常の関数のパラメーターを定義できるのと同じように、コンストラクターのパラメーターも定義できます。コンストラクターの場合、new
キーワードを使用してオブジェクトを作成するときに引数を指定します。これらの引数は、構成名に続く括弧内に渡します。
コンストラクターのいくつかのパラメーターを定義すると、コンストラクター内のどこでもそれを使用できます。Person
このチュートリアル全体で作業してきたコンストラクターを取り上げます。通常、2つのプロパティが含まれています:name
とage
。これらの2つのプロパティをすべてのオブジェクトで同じにすることは、意味がありません。
両方のプロパティを静的な値で定義する代わりに、コンストラクターに2つのパラメーターを追加できます。プロパティごとに1つのパラメータ。次に、コンストラクター内で、これらのパラメーターを使用して、指定された値でこれらのプロパティーを割り当てることができます。これにより、name
とage
プロパティの値が異なるオブジェクトを作成できます。
// Create constructor function
// that accepts two parameters, "name" and "age":
function Person(name, age) {
// Define properties and assign them
// with values provided for "name" and "age":
this.name = name
this.age = age
}
// Create object with Person constructor:
const personOne = new Person('Stan', 33)
// Create another object with Person constructor:
const personTwo = new Person('July', 29)
// Log the value of "name" on "personOne" object:
console.log(personOne.name)
// Output:
// 'Stan'
// Log the value of "age" on "personOne" object:
console.log(personOne.age)
// Output:
// 33
// Log the value of "name" on "personTwo" object:
console.log(personTwo.name)
// Output:
// 'July'
// Log the value of "age" on "personTwo" object:
console.log(personTwo.age)
// Output:
// 29
this
あなたはコンストラクタ関数を操作するときのキーワードは非常に重要です。新しいプロパティとメソッドを定義するときに使用します。またthis
、プロパティにアクセスしてメソッドを呼び出す場合にもキーワードを使用します。ただし、this
キーワードを使用する頻度は関係ありません。
this
当時、それが何を指しているのかを理解することは、答えるのが難しい質問である場合があります。これが簡単な答えです。の値はthis
、次の2つのいずれかになります。まず、関数コンストラクターを使用している場合、値はコンストラクターになります。
次に、コンストラクターを使用して新しいオブジェクトを作成すると、の値がthis
新しいオブジェクトになります。これは、作成するすべてのインスタンス、すべての新しいオブジェクトに適用されます。の値this
は常にその特定のオブジェクトになります。
// Create constructor function:
function Person(name, age) {
// "this" here refers to the constructor function.
// this.name => Person.name
this.name = name
this.age = age
}
const objJoe = new Person('Joe', 19)
// For "objJoe" object the value of "this"
// will be the "objJoe" object itself.
// So, "this.name" in constructor will become "objJoe.name".
console.log(objJoe.name)
// Output:
// 'Joe'
const objTim = new Person('Tim', 23)
// For "objTim" object the value of "this"
// will be the "objTim" object itself.
// So, "this.name" in constructor will become "objTim.name".
console.log(objJoe.name)
// Output:
// 'Tim'
コンストラクター関数は、同じ形状でコードが少ない複数のオブジェクトを作成する場合に役立ちます。また、コードの変更と保守を容易にすることもできます。このチュートリアルが、コンストラクター関数とは何か、それらがどのように機能するか、およびそれらを使用してオブジェクトを作成する方法を理解するのに役立つことを願っています。
この記事が気に入ったら、今後の投稿を見逃さないように購読してください。
リンク: https://blog.alexdevero.com/javascript-constructor-functions/
1638075600
JavaScriptは、オブジェクトを作成するための複数の方法を提供します。これらの方法には、オブジェクトリテラル、、Object()
クラス、およびコンストラクター関数が含まれます。このチュートリアルでは、3番目のオプションを示します。コンストラクター関数とは何か、それらがどのように機能するか、およびそれらを使用してオブジェクトを作成する方法について学習します。
JavaScriptでは、オブジェクトの作成に使用できる方法が複数あります。使用できる最も簡単なツールは、オブジェクトリテラル、new Object()
またはObject.create()
です。しかし、もっと違うものが必要な場合はどうでしょうか。他の同様のオブジェクトを作成するための青写真またはレシピとして使用できるオブジェクトを作成するとどうなりますか?
すべて同じプロパティを持つオブジェクトをいくつか作成したいとします。おそらくメソッドも作成します。あなたは間違いなくこのオブジェクトをリテラルにすることができます。ただし、多くのコードをコピーする必要があります。または、オブジェクトの不要なクローンを作成する必要がありますが、これは予測できない場合があります。
もう1つのオプションは、「コンストラクター」と呼ばれるものを作成することです。このコンストラクターには、さまざまなプロパティとメソッドを含めることができ、それを使用して新しいオブジェクトを作成できます。このコンストラクターで作成する各オブジェクトには、コンストラクターで定義されたすべてのプロパティとメソッドもあります。これにより、時間とコードを大幅に節約できます。
このコンストラクターを作成する1つの方法は、ES6で導入されたJavaScriptクラスを使用することです。もう1つのオプションは、「コンストラクター関数」と呼ばれるものを使用することです。このコンストラクター関数とは何か、それらがどのように機能するか、そしてそれらを使用してオブジェクトを作成する方法を見てみましょう。
コンストラクター関数の構文は単純で単純です。これは、JavaScript関数を知っている場合に特に当てはまります。これら2つの構文はほとんど同じです。すべてのコンストラクター関数はfunction
キーワードで始まります。以下は、コンストラクター関数の名前の名前です。
コンストラクター関数の名前は大文字で始める必要があります。これは必須ではありませんが、一般的な規則であり、優れた方法です。ただし、小文字を使用すると機能します。次はパラメータ付きの括弧です。パラメータを指定したくない場合でも、とにかく括弧を含める必要があります。
最後は、パラメーター付きの括弧の後に続く関数本体です。この本体は、コンストラクターのプロパティとメソッドを指定する場所です。このコンストラクターを使用して新しいオブジェクトを作成すると、すべてのオブジェクトにこれらのプロパティとメソッドが含まれます。
// Syntax of a constructor function:
// - function keyword
// - name of the constructor function
// - parameters for constructor function
// - body of the constructor function
function MyConstructorFunc(param) {
// Function constructor body.
}
コンストラクター関数を作成することは1つのことです。それらを使用して新しいオブジェクトを作成することも別の方法です。幸いなことに、これを行う方法は1つしかありません。コンストラクター関数を使用して新しいオブジェクトを作成する場合は、new
キーワードを使用します。このキーワードの後には、コンストラクター名と括弧のセットが続きます。
コンストラクターがパラメーターを受け入れる場合は、括弧内に必要な引数を渡します。それ以外の場合は、空のままにします。通常、これは、新しいオブジェクトを変数に割り当てるとともに行います。コンストラクター関数を使用して、必要な数のオブジェクトを作成できることを忘れないでください。
// Create constructor function:
function Person() {}
// Create object with Person constructor:
const personOne = new Person()
// Create another object with Person constructor:
const personTwo = new Person()
コンストラクター関数でのプロパティとメソッドの定義は簡単です。とはいえ、覚えておかなければならないことが1つあります。プロパティまたはメソッドを定義する場合は、this
キーワードを使用する必要があります。let
、const
またはvar
を使用しないでください。変数ではなく、プロパティを定義しようとしています。
したがって、左側で、this
キーワードから始めて、プロパティの名前を指定します。.
これら2つの間にドット()を追加します。右側で、プロパティの値を定義すると完了です。メソッドを定義する場合、プロセスはほとんど同じです。また、this
キーワードに続けてメソッド名を使用する必要があります。
唯一の違いは右側にあります。ここでは、function
キーワードを使用する必要があります。これにより、関数を定義することがJavaScriptに通知されます。通常の関数の代わりに矢印関数を使用することもできます。コンストラクターメソッドを定義すると、コンストラクター内に既に存在する任意のプロパティにアクセスできます。
プロパティにアクセスし、正しく参照するには、this
キーワードを使用する必要があります。this
この場合には、コンストラクタ関数自体の基準となります。だから、this
基本的にはのようconstructorFunctionItself
です。
// Create constructor function:
function Person() {
// Define properties "name" and "age":
this.name = 'Anonymous'
this.age = 35
// Define method "getName" that returns a short message:
this.getName = function() {
// "this" here refers to the "Person" constructor.
// "this.name" is like "Person.name".
return `Hello, my name is ${this.name}.`
}
}
// Create object with Person constructor:
const personOne = new Person()
// Log the value of "name":
console.log(personOne.name)
// Output:
// 'Anonymous'
// Log the "getName" message:
console.log(personOne.getName())
// Output:
// 'Hello, my name is Anonymous.'
// Create another object with Person constructor:
const personTwo = new Person()
// Log the value of "name":
console.log(personTwo.name)
// Output:
// 'Anonymous'
// Log the "getName" message:
console.log(personTwo.getName())
// Output:
// 'Hello, my name is Anonymous.'
コンストラクター関数を定義するときに、コンストラクター関数内でのみプロパティとメソッドを定義することは1つのオプションです。別のオプションは、コンストラクターが作成された後、それらをその外部で定義することです。この場合、prototypeというプロパティを使用します。これは、JavaScriptのすべての関数が持つ特別なプロパティです。
このprototype
プロパティは、コンストラクター関数で定義されたすべてのプロパティとメソッドを含むオブジェクトです。constructor
プロパティも含まれています。このプロパティは、現在作業しているコンストラクターを指します。このプロパティを使用すると、プロパティとメソッドをコンストラクターに追加、変更、または削除できます。
// Create constructor function:
function Person() {
// Define properties "name" and "age":
this.name = 'Anonymous'
this.age = 35
}
// Create object with Person constructor:
const personOne = new Person()
// Create another object with Person constructor:
const personTwo = new Person()
// Add properties to Person constructor using prototype:
Person.prototype.gender = 'female'
Person.prototype.height = 1.7
// Log the value of "gender" on "personOne" object:
console.log(personOne.gender)
// Output:
// 'female'
// Log the value of "height" on "personTwo" object:
console.log(personTwo.height)
// Output:
// 1.7
// Add method "getName" to Person constructor using prototype:
Person.prototype.getName = function() {
// "this" here will correctly refer to the Person constructor.
// So, "this.name" will again basically become "Person.name".
return `Hello, my name is ${this.name}.`
}
// Log the message:
console.log(personTwo.getName())
// Output:
// 'Hello, my name is Anonymous.'
注意事項prototype
:上記の例でわかるように、覚えておくべきことが1つあります。プロトタイプを介してコンストラクターにプロパティまたはメソッドを追加する場合、そのコンストラクターで既に作成されているすべてのオブジェクトにも追加します。
プロパティまたはメソッドを追加したい場合がありますが、すべてではなく1つのオブジェクトにのみ追加します。この場合、prototype
プロパティまたはメソッドがどこにでも追加されるため、はオプションではありません。代わりにできることは、プロパティまたはメソッドを特定のオブジェクトに直接追加することです。たとえば、ドット表記を使用します。
この後、手元のオブジェクトのみがその新しいプロパティまたはメソッドを持ちます。同じコンストラクターで作成された他のオブジェクトはそうではありません。これは、プロパティまたはメソッドを通常のオブジェクトに追加するために使用する方法です。コンストラクターで作成されたすべてのオブジェクトはオブジェクトです。したがって、これはここでも機能します。
// Create constructor function:
function Person() {
// Define properties "name" and "age":
this.name = 'Anonymous'
this.age = 35
}
// Create object with Person constructor:
const personOne = new Person()
// Create another object with Person constructor:
const personTwo = new Person()
// Add property "gender" only to "personOne" object:
personOne.gender = 'female'
// Add property "height" only to "personTwo" object:
personTwo.height = 1.7
// Log the value of "gender" on "personOne" object:
console.log(personOne.gender)
// Output:
// 'female'
// Log the value of "height" on "personOne" object:
console.log(personOne.height)
// Output:
// undefined // <= this is correct, height exists only on personTwo
// Log the value of "gender" on "personTwo" object:
console.log(personTwo.gender)
// Output:
// undefined // <= this is correct, gender exists only on personOne
// Log the value of "height" on "personTwo" object:
console.log(personTwo.height)
// Output:
// 1.7
// Add "getGender()" method only to "personOne" object:
personOne.getGender = function() {
return `I am a ${this.gender}.`
}
// Add "getHeight()" method only to "personTwo" object:
personTwo.getHeight = function() {
return `I am ${this.height}m tall.`
}
// Call the "getGender()" method on "personOne" object:
console.log(personOne.getGender())
// Output:
// 'I am a female.'
// Call the "getHeight()" method on "personOne" object:
console.log(personOne.getHeight())
// Output:
// TypeError: personOne.getHeight is not a function
// Call the "getGender()" method on "personTwo" object:
console.log(personTwo.getGender())
// Output:
// TypeError: personTwo.getGender is not a function
// Call the "getHeight()" method on "personTwo" object:
console.log(personTwo.getHeight())
// Output:
// 'I am 1.7m tall.'
オブジェクトの青写真を作成するオプションは素晴らしいです。これまで、すべてのデータが静的で変更できないコンストラクターの例を見てきました。これが唯一の方法という意味ではありません。最初に、構文について説明したときに、パラメーターについて簡単に説明しました。
これは、コンストラクター関数をより動的にする方法です。通常の関数のパラメーターを定義できるのと同じように、コンストラクターのパラメーターも定義できます。コンストラクターの場合、new
キーワードを使用してオブジェクトを作成するときに引数を指定します。これらの引数は、構成名に続く括弧内に渡します。
コンストラクターのいくつかのパラメーターを定義すると、コンストラクター内のどこでもそれを使用できます。Person
このチュートリアル全体で作業してきたコンストラクターを取り上げます。通常、2つのプロパティが含まれています:name
とage
。これらの2つのプロパティをすべてのオブジェクトで同じにすることは、意味がありません。
両方のプロパティを静的な値で定義する代わりに、コンストラクターに2つのパラメーターを追加できます。プロパティごとに1つのパラメータ。次に、コンストラクター内で、これらのパラメーターを使用して、指定された値でこれらのプロパティーを割り当てることができます。これにより、name
とage
プロパティの値が異なるオブジェクトを作成できます。
// Create constructor function
// that accepts two parameters, "name" and "age":
function Person(name, age) {
// Define properties and assign them
// with values provided for "name" and "age":
this.name = name
this.age = age
}
// Create object with Person constructor:
const personOne = new Person('Stan', 33)
// Create another object with Person constructor:
const personTwo = new Person('July', 29)
// Log the value of "name" on "personOne" object:
console.log(personOne.name)
// Output:
// 'Stan'
// Log the value of "age" on "personOne" object:
console.log(personOne.age)
// Output:
// 33
// Log the value of "name" on "personTwo" object:
console.log(personTwo.name)
// Output:
// 'July'
// Log the value of "age" on "personTwo" object:
console.log(personTwo.age)
// Output:
// 29
this
あなたはコンストラクタ関数を操作するときのキーワードは非常に重要です。新しいプロパティとメソッドを定義するときに使用します。またthis
、プロパティにアクセスしてメソッドを呼び出す場合にもキーワードを使用します。ただし、this
キーワードを使用する頻度は関係ありません。
this
当時、それが何を指しているのかを理解することは、答えるのが難しい質問である場合があります。これが簡単な答えです。の値はthis
、次の2つのいずれかになります。まず、関数コンストラクターを使用している場合、値はコンストラクターになります。
次に、コンストラクターを使用して新しいオブジェクトを作成すると、の値がthis
新しいオブジェクトになります。これは、作成するすべてのインスタンス、すべての新しいオブジェクトに適用されます。の値this
は常にその特定のオブジェクトになります。
// Create constructor function:
function Person(name, age) {
// "this" here refers to the constructor function.
// this.name => Person.name
this.name = name
this.age = age
}
const objJoe = new Person('Joe', 19)
// For "objJoe" object the value of "this"
// will be the "objJoe" object itself.
// So, "this.name" in constructor will become "objJoe.name".
console.log(objJoe.name)
// Output:
// 'Joe'
const objTim = new Person('Tim', 23)
// For "objTim" object the value of "this"
// will be the "objTim" object itself.
// So, "this.name" in constructor will become "objTim.name".
console.log(objJoe.name)
// Output:
// 'Tim'
コンストラクター関数は、同じ形状でコードが少ない複数のオブジェクトを作成する場合に役立ちます。また、コードの変更と保守を容易にすることもできます。このチュートリアルが、コンストラクター関数とは何か、それらがどのように機能するか、およびそれらを使用してオブジェクトを作成する方法を理解するのに役立つことを願っています。
この記事が気に入ったら、今後の投稿を見逃さないように購読してください。
リンク: https://blog.alexdevero.com/javascript-constructor-functions/
1642970760
今回のJavaScript講座はこれまでの集大成です。
JSの仕事は「データのやり取り」「DOM操作」ですが、今回で実感できるかと思います。
今まで勉強して学んだJavaScriptの知識をフル活用しましょう。
今後もJavaScriptプログラミング講座は続けていきますが
新しい分野に突入します。そちらもお楽しみに♪
🐙 GitHub(使用したコード)
https://github.com/lightsound/javascript-class/tree/master/009_callApi-addDOM
📙 もくじ
0:00 今回つくるものを紹介
1:27 コードを書く準備
2:46 JavaScriptでIDがついているタグを変数に格納
3:43 ボタンにクリックイベントを追加する
4:45 ユーザーを取得するWeb APIを叩く
6:41 ボタンを押してli要素が追加されるようにする
9:48 APIで取得したユーザーをli要素として追加する
12:37 名前以外にもli要素として追加することができる
13:40 forEach以外の書き方も紹介
15:13 if文で条件も追加してみる
17:20 ページを読み込んだときにユーザーをli要素に追加する
18:43 リファクタリング① 同じ記述を共通化する
20:46 リファクタリング② 処理を分解する
23:35 リファクタリング③ 順序を整理する
24:01 リファクタリング④ コメントを追加する
24:38 リファクタリングの重要性を解説
25:59 今回の講座は今までの講座の集大成です
27:19 クロージング(高評価とコメントお願いします)
🔥基礎から学ぶ JavaScript 入門
【第1回】フロントエンド開発でJavaScriptが必要な理由を解説
【第2回】Twitterを例にJavaScriptがどんな働きをするのか理解しよう
【第3回】オブジェクト・プロパティ・メソッドについて理解しよう
【第5回】変数を理解しよう!var, let, constの使い分け!
🏷️ タグ
#javascript
1642916340
🚀 今日のひとこと
今回は前回の発展的内容になっています。
実際にJavaScriptオブジェクトのコードを書きます。
またWindow、Documentオブジェクトの
プロパティ・メソッドにも触れています。
フロントエンドエンジニアを目指す方や
初心者・駆け出しエンジニアにオススメの入門講座になっております。
📙 もくじ
0:00 オブジェクトの宣言方法について
1:04 プロパティとメソッドの色で判別する方法
2:10 YouTuberオブジェクトの中身を解説
3:49 プロパティやメソッドへのアクセス方法
6:47 補完時に出てくるテキスト(abc)について
7:48 補完の恩恵① typo防止
8:27 補完の恩恵② 定義元を見なくても中身を知れる
10:09 Chrome DevToolsのConsoleタブでオブジェクトを扱う
12:06 Window, Documentオブジェクトをホワイトボードで解説
14:41 Window, Documentのメソッド・プロパティをエディタ上で参照
16:58 Windowオブジェクトをブラウザで試してみる
17:48 Documentオブジェクトをブラウザで試してみる
19:03 Windowを制御するプロパティやメソッドを呼び出す
20:05 まとめ
🔥基礎から学ぶ JavaScript 入門
1633963200
このチュートリアルでは、JavaScriptの比較演算子についてすべてを学びます。
javascript比較演算子は、2つのオペランド値を比較し、結果をブール形式(trueまたはfalse)で返します。
次のjs比較演算子を使用して、2つのオペランド(文字列、数値など)の値を比較できます。
<
未満<=
マイナス以下>
より大きい>=
以上==
に等しい!=
等しくない===
厳密に等しい!==
厳密に等しくない次の表に、JavaScriptの比較演算子を示します。
演算子 | 説明 |
---|---|
== | タイプを考慮せずに、2つのオペランドの等価性を比較します。 |
=== | 2つのオペランドの等価性を型と比較します。 |
!= | 2つのオペランドの不等式を比較します。 |
>> | 左側の値が右側の値より大きいかどうかを確認します。はいの場合はtrueを返し、そうでない場合はfalseを返します。 |
< | 左のオペランドが右のオペランドよりも小さいかどうかを確認します。はいの場合はtrueを返し、そうでない場合はfalseを返します。 |
> = | 左のオペランドが右のオペランド以上かどうかを確認します。はいの場合はtrueを返し、そうでない場合はfalseを返します。 |
<= | 左のオペランドが右のオペランド以下かどうかをチェックします。はいの場合はtrueを返し、そうでない場合はfalseを返します。 |
上記のように、比較演算子は結果をブール形式(trueまたはfalse)で返します。
次の例を参照してください。
let a = 30 > 10; // true
let b = 50 < 10; // false
let c = 20 == 20; // true
両方のオペランドが数値の場合、JS比較演算子は数値比較を実行します。
次の例を参照してください。
let a = 10,
b = 20;
console.log(a >= b); // false
console.log(a == 10); // true
この例では、2つの変数、 a
is 10
、 b
isがあり 20
ます。 a>=b
表現を返す false
と a==10
表現を返します true
。
提供された両方のオペランドが文字列の場合、JavaScriptは文字列内の文字コードを1つずつ数値的に比較します。
let name1 = 'hello',
name2 = 'js';
let result = name1 < name2;
console.log(name1 == 'hello'); // true
console.log(result); // true
JavaScriptで2つの文字列を比較すると、文字コードが数値的に比較され、予期しない結果が生じる可能性があります。
次の例を参照してください。
let a = 'apple',
b = 'Banana';
let result = b < a;
console.log(result); // true
この例でb
は、 はa
。未満です 。バナナの文字列B
には文字コードが 66
あり、アップルの文字列 a
には文字コードがあるためです 97
。
この問題を修正し、文字列を同等に比較したい場合。まず、文字列を小文字または大文字の一般的な形式に変換してから、比較する必要があります。
次の例を参照してください
let a = 'Hello',
b = 'JS';
let res = a.toUpperCase() < b.toUpperCase();
console.log(res); // true
JavaScripttoUpperCase()
は、文字列文字を大文字に変換するために使用されるメソッドです。
1つのオペランドが数値で、2番目のオペランドが文字列の場合、JavaScriptは数値以外のオペランドを数値に変換し、比較を数値で評価します。
console.log(15 < '30'); // true
この例では、文字列 '30'
は30
数値15に変換され、比較され ます。
オペランドがオブジェクトの場合、JavaScriptはvalueOf()
そのオブジェクトのメソッドを呼び出して、 比較用の値を取得します。オブジェクトにvalueOf()
メソッドがない場合 、JavaScriptはtoString()
メソッドを呼び出し 、戻り値を使用して比較します。次の例を参照してください。
let apple = {
valueOf: function() {
return 10;
}
};
let orange = {
toString: function() {
return '20';
}
};
console.log(apple > 10); // false
console.log(orange == 20); // true
この最初の比較では、 apple
オブジェクトには valueOf()
を返すメソッドがある 10
ため、JavaScriptは比較に10を使用します。2番目の比較では、JavaScriptが最初にvalueOf()
メソッドを呼び出します 。ただし、 orange
オブジェクトにはvalueOf()
メソッドがない ため、JavaScriptはtoString()
メソッドを呼び出して の戻り値を取得します 20
。
1つのオペランドがブール値で、2番目のオペランドがJavaScriptの異なるデータ型である場合。まず、オペランド値を同じデータ型に変換し、変換されたオペランド値を異なるオペランドと比較します。
注:-true
に変換され 1
、 false
に変換され 0
ます。
console.log(true > 0); // true
console.log(false < 1); // true
console.log(true > false); // true
console.log(false > true); // false
console.log(true >= true); // true
console.log(true <= true); // true
console.log(false <= false); // true
console.log(false >= false); // true
null
と undefined
JavaScriptでは、に null
等しい undefined
。これは、次の式がを返すことを意味します true
。
console.log(null == undefined); // true
NaN
数値との比較 いずれかのオペランドが NaN
、の場合、equal operator(==
)はfalse
。を返します 。
console.log(NaN == 1); // false
平
console.log(NaN == NaN); // false
を別の値 と比較すると、 等しくない(!=
)演算子が返され ます。trueNaN
console.log(NaN != 1); // true
そしてまた
console.log(NaN != NaN); // true
===
)および厳密に等しくない(!==
)上記の表で、使用可能な厳密に等しい( ===
)および厳密に等しくない( !==
)比較演算子。
オペレーター | 意味 |
---|---|
=== | 厳密に等しい |
!== | 厳密には等しくない |
jsのstrictequalおよびnotstrict equal演算子は、jsのequalおよびnotequal演算子のように機能します。ただし、js比較演算子を使用して比較する前にオペランドを変換しません。
次の例を参照してください。
console.log("10" == 10); // true
console.log("10" === 10); // false
ここ、
===
)を使用し、比較 前に文字列を変換しません。このチュートリアルでは、JavaScript比較演算子を使用してオペランド値を比較する方法を学習しました。
リンク: https://www.tutsmake.com/javascript-comparison-operators/
1634730300
このチュートリアルでは、単一の複数のアイテム(要素)を配列に追加する方法と、javaScriptの配列push()およびConcat()メソッドを使用して1つの配列を別の配列に追加する方法を例とともに学習します。
javaScript push()メソッドは、配列の最後に新しい要素を追加するために使用されます。そして、与えられた配列の長さを変更します。
javascriptは要素と配列要素を配列チュートリアルにプッシュします。次のことを学びます。
ここでは、特定の配列に単一のアイテムを追加する方法を学習します。例を見てみましょう。
arrNumという名前の配列があり、その中に4つの要素が含まれているとします。以下を参照してください。
var arrNum = [
"one",
"two",
"three",
"four"
];
単一のアイテムをarryNum配列に追加する場合。したがって、以下のようにjavaScriptのpush()メソッドを使用できます。
var arrNum = [
"one",
"two",
"three",
"four"
];
arrNum.push("five");
console.log( arrNum );
[「1」、「2」、「3」、「4」、「5」]
特定の配列に複数のアイテムと要素を追加する場合。以下の例を使用できます。
特定の配列に複数のアイテムを追加する方法の新しい例を見てみましょう。
arrMulという名前の配列があり、それに5つの値が含まれていて、さらに5つまたはNの値を追加したい場合は、次の例を使用します。
var arrMul = [
"one",
"two",
"three",
"four"
];
arrMul.push("six","seven","eight","nine","ten");
console.log( arrMul );
[「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」、「9」、「10」]
JavaScriptで、ある配列の項目を別の配列に追加する方法や、配列を配列にプッシュする方法の例を見てみましょう。
2つの配列があり、最初の配列名がarryFirstで、5つの項目が含まれているとします。また、2番目の配列名arrySecondがあり、5つの項目も含まれています。2番目の配列値を最初の配列にマージする場合。したがって、JavaScriptのConcat()関数を使用できます。
var arryFirst = [ "one", "two", "three", "four", "five" ];
var arrySecond = [ "six", "seven", "eight", "nine", "ten" ];
arryFirst = arryFirst.concat(arrySecond);
console.log(arryFirst);
[「1」、「2」、「3」、「4」、「5」、「6」、「7」、「8」、「9」、「10」]
javaScriptは要素と配列要素を配列にプッシュします。このチュートリアルでは、特定の配列に単一および複数のアイテムを追加する方法を学習しました。また、JavaScriptのconcat()メソッドを使用して、ある配列を別の配列に追加する方法についても学びます。
リンク: https://www.tutsmake.com/javascript-push-array-into-array-example/