其实js是不支持私有变量的。哪怕到es6的class语法。虽然有许多变相的方式。但非常冗余而不推崇。
这里介绍的实际上也不是class语法,而是普通的函数,并且利用IIFE(闭包)的方式来实现私有。
这种方式也被称为“模块模式”
var person = (function(){
var age = 25
return {
name: 'Lee',
getAge: function () {
return age
},
setAge: function () {
age++
}
}
}());
console.log(person.name) // Lee
console.log(person.getAge()) // 25
person.age = 100 // hack try...
console.log(person.getAge()) // 25
构造函数的私有变量
function Person(name) {
this.name = name
var age = 18
this.getAge = function () {
return age
}
this.setAge = function () {
age++
}
}
var person = new Person('Lee')
console.log(person.name) // Lee
console.log(person.getAge()) // 18
person.age = 100 // hack try...
Person.age = 100 // hack try...
console.log(person.getAge()) // 18