getterとsetterとcall関数
3-3. クラスのgetter(取得者)とsetter(設定者)
取得者と設定者の方法もあります.関数のように成長する方法ですが、関数ではありません.これは仮想の関数です.これらは,コンストラクション関数設定のproperty(carname)を取得して設定する際に用いる方法である.またgetの名前はpropertyとは異なる必要があります.例えば、ユーザが誤って情報を記入した場合、コンピュータが理解できるように設定する.すなわち、ユーザが誤って設定した情報をgetに設定し、getに正しく設定する.この場合、get/set関数の名前は、処理する属性の名前とは異なる必要があります.(通常は区別することによって)そうでないとset関数が呼び出され続け、エラーが発生します.propertyとは異なり、set関数が設定された_age
をage
に内部的に再割り当てするため、呼び出すときはUser.age
と呼ぶことができる.
ユーザーが誤ってuser年齢を0未満に設定した場合は、get/setを使用して次のようにします.したがって、0未満の年齢を入力すると、警告ウィンドウを開くか、0に設定できます.class User {
constructor(firstName, secondName, age) {
this.firstName = firstName;
this.secondName = secondName;
this.age = age;
}
get age() {
return this._age;
}
set age(value) {
// 요건 공격적인 방법
// if(value < 0) {
// throw Error('age can't be negative')
// }
// 아래건 좀 젠틀한 방법
this._age = value < 0 ? 0 : value;
}
}
let User1 = new User("영훈", "고", "-1");
console.log(User1.age);
//0
4.一般関数をオブジェクトに挿入する方法
ここにはjavascriptの特別な理由があります.すなわち、call
法により、独立して存在する関数を方法としてオブジェクトに入れることができる.
先にbindの説明で少し説明したが、関数はオブジェクトに存在するため、関数のscopeはオブジェクトのscopeに存在する.したがって,sum関数のthisはsumを囲むオブジェクトとなるので,sum中のthis.firstは実行されます.var kim = { first: 10, second: 20 };
var lee = { first: 20, second: 50 };
function sum(para) {
return para + (this.first + this.second);
}
// sum 함수와 객체 연계시키기. 문법: call(연계시키고 싶은 함수, 그 함수안에 들어갈 parameter..)
console.log(sum.call(kim, "kimpara: "));
console.log(sum.call(lee, "leepara: "));
// kimpara: 30
// leepara: 50
//그럼 kim 객체에 sum 함수가 추가된것일까?
console.log(kim.sum());
// kim.sum is not a function
// 객체의 속성을 바꾸는 것이 아닌 일시적으로 kim의 property를 불러내서 사용하는것인것 같다.
call
に似た機能があり、bind
という方法です.callとは異なり、callは作成時に直ちに使用され、bindは関数を後で呼び出す.言い換えれば、変数に割り当てると使用できます.(bindは新しい関数を再作成して呼び出すため)extends 위의 코딩 ㅋㅋㅋ
var kimBind = sum.bind(kim, "bindKim: ");
console.log(sum.call(kim, "call: "));
console.log(kimBind);
console.log(kimBind());
// call: 30
// ƒ sum(para) {
// return para + (this.first + this.second);
// }
// bindKim: 30
次の記事では、コンストラクション関数間でprotoリンクを指定し、コンストラクション関数を継承する方法について説明します.今まで学んだことが深まるので理解しづらいです.
そしてこの困難な概念を簡単に有意義に教えてくれた李ゴヨンに感謝します.
Reference
この問題について(getterとsetterとcall関数), 我々は、より多くの情報をここで見つけました
https://velog.io/@yhko1992/getter와-setter와-call함수
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
class User {
constructor(firstName, secondName, age) {
this.firstName = firstName;
this.secondName = secondName;
this.age = age;
}
get age() {
return this._age;
}
set age(value) {
// 요건 공격적인 방법
// if(value < 0) {
// throw Error('age can't be negative')
// }
// 아래건 좀 젠틀한 방법
this._age = value < 0 ? 0 : value;
}
}
let User1 = new User("영훈", "고", "-1");
console.log(User1.age);
//0
ここにはjavascriptの特別な理由があります.すなわち、
call
法により、独立して存在する関数を方法としてオブジェクトに入れることができる.先にbindの説明で少し説明したが、関数はオブジェクトに存在するため、関数のscopeはオブジェクトのscopeに存在する.したがって,sum関数のthisはsumを囲むオブジェクトとなるので,sum中のthis.firstは実行されます.
var kim = { first: 10, second: 20 };
var lee = { first: 20, second: 50 };
function sum(para) {
return para + (this.first + this.second);
}
// sum 함수와 객체 연계시키기. 문법: call(연계시키고 싶은 함수, 그 함수안에 들어갈 parameter..)
console.log(sum.call(kim, "kimpara: "));
console.log(sum.call(lee, "leepara: "));
// kimpara: 30
// leepara: 50
//그럼 kim 객체에 sum 함수가 추가된것일까?
console.log(kim.sum());
// kim.sum is not a function
// 객체의 속성을 바꾸는 것이 아닌 일시적으로 kim의 property를 불러내서 사용하는것인것 같다.
call
に似た機能があり、bind
という方法です.callとは異なり、callは作成時に直ちに使用され、bindは関数を後で呼び出す.言い換えれば、変数に割り当てると使用できます.(bindは新しい関数を再作成して呼び出すため)extends 위의 코딩 ㅋㅋㅋ
var kimBind = sum.bind(kim, "bindKim: ");
console.log(sum.call(kim, "call: "));
console.log(kimBind);
console.log(kimBind());
// call: 30
// ƒ sum(para) {
// return para + (this.first + this.second);
// }
// bindKim: 30
次の記事では、コンストラクション関数間でprotoリンクを指定し、コンストラクション関数を継承する方法について説明します.今まで学んだことが深まるので理解しづらいです.そしてこの困難な概念を簡単に有意義に教えてくれた李ゴヨンに感謝します.
Reference
この問題について(getterとsetterとcall関数), 我々は、より多くの情報をここで見つけました https://velog.io/@yhko1992/getter와-setter와-call함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol