ホームページ >バックエンド開発 >PHPチュートリアル >javascript - JS プライベート変数にアクセスできないのはなぜですか?

javascript - JS プライベート変数にアクセスできないのはなぜですか?

WBOY
WBOYオリジナル
2016-08-23 09:17:431128ブラウズ

リーリー

すみません、customer.risk はアクセスできないのに、customer.name はアクセスできるのはなぜですか? リスクは誰のプライベート変数ですか? もしそうなら、なぜ顧客は自分のプライベート変数にアクセスできないのですか?

返信内容: リーリー

すみません、customer.risk はアクセスできないのに、customer.name はアクセスできるのはなぜですか? リスクは誰のプライベート変数ですか? もしそうなら、なぜ顧客は自分のプライベート変数にアクセスできないのですか?

これは決して私有地と呼ばれるものではありません。これは関数内で宣言する単なる変数です。属性なので、属性が非公開であるかどうかもわかります。したがって、属性自体には「誰のものなのか」という疑問があります。 コンストラクターを this.risk=0; に変更すると、これが属性の所有者であることがわかります。

どうしてそのような答えを受け入れることができますか?

関数コンストラクターでは、var を使用して変数を宣言します。この変数は、クロージャーまたは同様のメソッドを通じて公開されていない場合、外部からアクセスできません。さらに、riskcustomer のプライベート変数ではなく、customer とは関係ありませんが、関数オブジェクト に関連しています。顧客

new 演算子を使用するとオブジェクトが返され、呼び出された関数コンストラクターの this が返されるオブジェクトを指すため、 this を使用します。 code> 宣言されたプロパティには、<code>new によって返されるオブジェクトからアクセスできます。これはクロージャに多少似ていますが、クロージャが関数である点、ここではオブジェクトである点が異なります。


プライベート属性について言及しましたが、アクセスできる場合でもプライベートと呼ぶことができますか? var声明一个变量,可以认为这个变量是私有的,如果不以闭包或类似方式暴露出去,外面是无法访问的。而且risk也不是customer的私有变量,他和customer并没有关系,和Customer这个函数对象有关。
使用new运算符会返回一个对象,并且被调用函数构造器的this会指向将要返回的对象,所以你使用this声明的属性是可以被new

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。