首頁  >  文章  >  後端開發  >  javascript - 請問JS私有變數為何無法存取?

javascript - 請問JS私有變數為何無法存取?

WBOY
WBOY原創
2016-08-23 09:17:431112瀏覽

<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傳回的物件存取的。這有些類似閉包,只不過閉包是個函數,這裡是個物件罷了。

你都說了私有屬性,能訪問還能叫私有嗎?

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn