0

クロックフォードからこの記事を読んでいます: http://www.crockford.com/javascript/private.html

また、プライベートについて語るセクションでは、次のように述べています。

プライベート メンバーは、コンストラクターによって作成されます。コンストラクターの通常の変数とパラメーターは、プライベート メンバーになります。

スクリプトでこれを行うと、次のようになります。

"use strict"
function car(brand) {
    this.brand = brand;
    var year = 2012;
    var color = "Red";
}

var bmw = new car("BMW");
console.log(bmw.brand); // BMW -> VISIBLE ?!?

コンストラクタで渡されたプロパティに簡単にアクセスできます!コンストラクターを介して渡されたこれらの変数はプライベートであるべきではありませんか?

ありがとう!

4

4 に答える 4

1

そのちょっとした情報を誤解していると思います。プライベートメソッドがコンストラクターを「通過」するものであるとは言いませんが、コンストラクターによって「作成される」ものであると言います。

明確にするために、これを見てください:

function car(brand) {
    var year = 2012;
    var color = "Red";
}

これには3 つのプライベート変数があります。brandyearおよびcolor。この行を追加することで

this.brand = brand

パブリック プロパティを作成し、それにプライベート変数の値を割り当てています。パブリック プロパティとプライベート変数に同じ名前を付けたことは、ここでもそこでもありません。

this.publicBrand = brand
于 2016-02-03T10:35:36.123 に答える
0

コンストラクターに渡された値にアクセスできるわけではありません。あなたが行ったことはthis.brand、コンストラクターで渡された値と等しく設定されます。したがって、公開されている には、渡された値と同じ値が含まれるようになりました。設定するまで、コンストラクター内brandのローカル。brand!= this.brand

于 2016-02-03T10:35:33.627 に答える
0

コンテキスト ( this内部関数)に割り当てるものはすべて公開されています。newなしで関数を呼び出す場合、コンテキストは window オブジェクトであることに注意してください。

"use strict"
function car(brand) {
    this.brand = brand; //Public (can be accessed from outside because it is attached to the context/this)
    var year = 2012; //Private (inside function only)
    var color = "Red"; //Private (inside function only)
}

var bmw = new car("BMW");
console.log(bmw.brand); // BMW -> VISIBLE -> this.brand = brans
于 2016-02-03T10:39:26.573 に答える