18日目JavaScript
10507 ワード
カプセル化
<script>
function Calculate(w,h) {
var width = w;
var height = h;
this.getWidth = function() {
return width;
};
this.getHeigth = function() {
return height;
};
this.setWidth = function(w) {
if(w < 0) {
throw '길이는 음수일 수 없습니다.';
} else {
width = w;
}
};
this.setHeigth = function(h) {
if(h < 0) {
throw '높이는 음수일 수 없습니다.';
} else {
height = h;
}
};
}
Calculate.prototype.getArea = function() {
return this.getWidth() * this.getHeigth();
};
var calculate = new Calculate(5,7);
// 오류메세지 출력
// calculate.setWidth(-3);
// output = 35
alert('면적 = ' + calculate.getArea());
</script>
カプセル化とは?Privateプロパティとは、オブジェクトの外部にアクセスできない外部に非表示にするプロパティまたはメソッドです.
これにより、オブジェクト内部でしか使用できない値が露出したことによるエラーを低減することができる.
たとえば、多くの人と協力すれば、誰もが値にアクセスして変更できるため、これらの値を防止することで情報を保護できます.
上記の例では、関数の戻り値でオブジェクトを返します.このオブジェクトはメソッド
getWidth
とsetWidth
です.等からなり,これらの方法は外部関数として計算されたパラメータ値として伝達される値を用いる.例えば私たちは
var calculate = new Calculate(5,7);
calculate.setWidth(-3);
コードを記述すると、計算関数はthrow errorを出力します.幅が負の値であるためです.このことから,getのwidthとsetwidthは互いに値を共有していることが分かる.
デフォルトでは、JavaScriptではプライベート属性はサポートされておらず、モジュールのこれらの特性を使用してプライベート属性を使用できます.
エンクロージャが必要
var array = [];
var number = 5;
for(var i = 0; i<number; i++) {
array[i] = function() {
return i;
}
}
for(var e in array) {
console.log(array[e]());
}
output
5 5 5 5 5
arrayの配列は0 1 2 3 4で充填されるべきであると考えたが,return = i
を返したため,i値は最終的にiの最終値5に変換された.この問題を解決するために、エンクロージャを使用する必要があります.
Closerについては今度もっと知りましょう.
さらに勉強する内容
<script>
var originalArray = [1,2,3,4,5];
var newArray = [];
//깊은복사 = clone()
for(var i in originalArray) {
newArray[i] = originalArray[i];
}
originalArray[0] = 273;
alert(originalArray);
alert(newArray);
</script>
for反復文では,newArrayに元のArrayの値を加えた.そして、元のArray[0]の値を変更すると、newArrayの値も変わりますか?値段は変わらない.
理由は簡単だ.
originalArray
とnewArray
の配列が異なるアドレスに格納されていると理解すれば容易である.開けて言えば.
originalArray
はA棟マンション、newArray
はB棟マンションに住んでいるので、originalArray
をnewArray
に再配分しないと、異なる配列になります.Reference
この問題について(18日目JavaScript), 我々は、より多くの情報をここで見つけました https://velog.io/@leehangeul/JavaScript-19일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol