欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-04-28 13:42:07
...
function Customer(name) {  
    var risk = 0;  
    this.name = name;  
}  
var customer = new Customer("aa"); 
console.log(customer.name);  // aa
console.log(customer.risk); // undefined  

请问为何customer.risk无法访问而customer.name可以访问呢
risk是谁的私有变量呢?是customer的吗?如果是,为什么customer无法访问他自己的私有变量?

回复内容:

function Customer(name) {  
    var risk = 0;  
    this.name = name;  
}  
var customer = new Customer("aa"); 
console.log(customer.name);  // aa
console.log(customer.risk); // undefined  

请问为何customer.risk无法访问而customer.name可以访问呢
risk是谁的私有变量呢?是customer的吗?如果是,为什么customer无法访问他自己的私有变量?

这根本就不是你所说的私有属性。这只是你在函数里面声明了个变量。既然是属性,你也知道属性也有分是否私有,因此属性这个东西本身就有个 “他是属于谁的问题” 懂我意思没? 你把构造函数改下 改成 this.risk=0;你就会发现可以找到了,this在这里就是属性的主人。

怎么会接受这么一个答案?
在函数构造器内,使用var声明一个变量,可以认为这个变量是私有的,如果不以闭包或类似方式暴露出去,外面是无法访问的。而且risk也不是customer的私有变量,他和customer并没有关系,和Customer这个函数对象有关。
使用new运算符会返回一个对象,并且被调用函数构造器的this会指向将要返回的对象,所以你使用this声明的属性是可以被new返回的对象访问的。这有些类似于闭包,只不过闭包是个函数,这里是个对象罢了。

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