前言

大家都知道, js是没有private和public关键字的, 所以js也就不存在私有属性和方法的说法.

但是js有个叫做闭包的东西, 通过该闭包就能创建私有属性和方法.

原理

js的作用域是通过原型链实现的. 我们只需要让暴露的对象引用另一个不暴露对象的属性和方法. 那么看上去暴露对象就有了私有属性和方法. 原因在于, 一个对象如果被引用, 那么就不会释放该对象存在的作用域.(万物皆对象, 属性和方法也是对象)

20200919081533-2021-12-29-21-12-05

实现

function creatPrivate(){
 var privateProperty = 'privateProperty'
 var privateMethod = function(){
   console.log('privateMethod')
 }
 return{
   publicProperty:privateProperty,
   publicMethod:privateMethod
 }

 var obj = creatPrivate()
}

console.log(obj.publicProperty) //privateProperty
console.log(obj.privateProperty) //undefined

obj.privateProperty() //privateMethod
obj.privateProperty() //undefined

上面的creatPrivate函数执行后, 返回一个对象被obj变量接收, 该对象引用了函数中的属性和方法. 所以函数虽然执行完毕, 但是不会释放privateProperty,privateMethod所在的作用域. 但是我们只能访问暴露对象的publicPropertypublicMethod. 这样就实现了私有属性和方法.

结尾

以后我们就能把不想暴露给别人的东西做成私有变量. 可以实现和php,java差不多的效果. 奥利干!

THE END
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

2024年10月

新增

新增

新增

新增

新增

新增

新增

新增

新增

新增