84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
function Customer(name) { var risk = 0; this.name = name; } var customer = new Customer("aa"); console.log(customer.name); // aa console.log(customer.risk); // undefined
new Customer时,var risk发生了什么?
认证0级讲师
怎么会接受这么一个答案?在函数构造器内,使用var声明一个变量,可以认为这个变量是私有的,如果不以闭包或类似方式暴露出去,外面是无法访问的。而且risk也不是customer的私有变量,他和customer并没有关系,和Customer这个函数对象有关。使用new运算符会返回一个对象,并且被调用函数构造器的this会指向将要返回的对象,所以你使用this声明的属性是可以被new返回的对象访问的。这有些类似于闭包,只不过闭包是个函数,这里是个对象罢了。
var
risk
customer
Customer
new
this
比如把代码改成这样
function Customer(name) { var risk = 0; this.name = name; window.getRisk = function(){ return risk; } return {test :1} } var customer = new Customer("aa"); console.log(customer.name); //undefined 当构造器返回一个对象,你在new的时候将不返回this了,你就无法获得name的访问了。 上面加了一个getRisk方法,这不就是一个闭包,是不是和之前返回this的时候有些相似。
你都说了私有属性,能访问还能叫私有吗?
怎么会接受这么一个答案?
在函数构造器内,使用
var
声明一个变量,可以认为这个变量是私有的,如果不以闭包或类似方式暴露出去,外面是无法访问的。而且risk
也不是customer
的私有变量,他和customer
并没有关系,和Customer
这个函数对象有关。使用
new
运算符会返回一个对象,并且被调用函数构造器的this
会指向将要返回的对象,所以你使用this
声明的属性是可以被new
返回的对象访问的。这有些类似于闭包,只不过闭包是个函数,这里是个对象罢了。比如把代码改成这样
你都说了私有属性,能访问还能叫私有吗?