Maison  >  Article  >  développement back-end  >  javascript - 请问JS私有变量为何无法访问?

javascript - 请问JS私有变量为何无法访问?

WBOY
WBOYoriginal
2016-08-23 09:17:431112parcourir

<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返回的对象访问的。这有些类似于闭包,只不过闭包是个函数,这里是个对象罢了。

你都说了私有属性,能访问还能叫私有吗?

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn