ホームページ >バックエンド開発 >PHPチュートリアル >javascript - JS プライベート変数にアクセスできないのはなぜですか?
リーリー
すみません、customer.risk はアクセスできないのに、customer.name はアクセスできるのはなぜですか? リスクは誰のプライベート変数ですか? もしそうなら、なぜ顧客は自分のプライベート変数にアクセスできないのですか?
これは決して私有地と呼ばれるものではありません。これは関数内で宣言する単なる変数です。属性なので、属性が非公開であるかどうかもわかります。したがって、属性自体には「誰のものなのか」という疑問があります。 コンストラクターを this.risk=0; に変更すると、これが属性の所有者であることがわかります。
どうしてそのような答えを受け入れることができますか?
関数コンストラクターでは、var
を使用して変数を宣言します。この変数は、クロージャーまたは同様のメソッドを通じて公開されていない場合、外部からアクセスできません。さらに、risk
は customer
のプライベート変数ではなく、customer
とは関係ありませんが、関数オブジェクト に関連しています。顧客
。
new
演算子を使用するとオブジェクトが返され、呼び出された関数コンストラクターの this
が返されるオブジェクトを指すため、 this を使用します。 code> 宣言されたプロパティには、<code>new
によって返されるオブジェクトからアクセスできます。これはクロージャに多少似ていますが、クロージャが関数である点、ここではオブジェクトである点が異なります。
プライベート属性について言及しましたが、アクセスできる場合でもプライベートと呼ぶことができますか? var
声明一个变量,可以认为这个变量是私有的,如果不以闭包或类似方式暴露出去,外面是无法访问的。而且risk
也不是customer
的私有变量,他和customer
并没有关系,和Customer
这个函数对象有关。
使用new
运算符会返回一个对象,并且被调用函数构造器的this
会指向将要返回的对象,所以你使用this
声明的属性是可以被new