<code>function Customer(name) { var risk = 0; this.name = name; } var customer = new Customer("aa"); console.log(customer.name); // aa console.log(customer.risk); // undefined </code>
請問為何customer.risk無法訪問而customer.name可以訪問呢
risk是誰的私有變量呢?是customer的嗎?如果是,為什麼customer無法訪問他自己的私有變量?
<code>function Customer(name) { var risk = 0; this.name = name; } var customer = new Customer("aa"); console.log(customer.name); // aa console.log(customer.risk); // undefined </code>
請問為何customer.risk無法訪問而customer.name可以訪問呢
risk是誰的私有變量呢?是customer的嗎?如果是,為什麼customer無法訪問他自己的私有變量?
這根本就不是你所說的私有屬性。這只是你在函數裡面宣告了個變數。既然是屬性,你也知道屬性也有分是否私有,所以屬性這個東西本身就有個 「他是屬於誰的問題」 懂我意思沒? 你把構造函數改下來 改成 this.risk=0;你就會發現可以找到了,this在這裡就是屬性的主人。
怎麼會接受這麼一個答案?
在函數構造器內,使用var
聲明一個變量,可以認為這個變量是私有的,如果不以閉包或類似方式暴露出去,外面是無法訪問的。而且risk
也不是customer
的私有變量,他和customer
並沒有關係,和Customer
這個函數物件有關。
使用new
運算子會傳回一個對象,並且被呼叫函數建構器的this
會指向將要傳回的對象,所以你使用this
宣告的屬性是可以被new
傳回的物件存取的。這有些類似閉包,只不過閉包是個函數,這裡是個物件罷了。
你都說了私有屬性,能訪問還能叫私有嗎?