前言

大家都知道, 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
推荐文章
  • Property '...' has no initializer and is not definitely assigned in the constructor

  • taro&小程序 button按钮去除border边框

  • Webpack打包后文件报错 $ is not defined or jQuery is not defined

  • 申请腾讯企业邮箱

  • configuration.module has an unknown property 'loaders'

  • (连接不上github)关于ssh: connect to host github.com port 22: Connection timed out错误

  • Webpack file-loader outputs [object Module]

  • 微信公众号菜单设置历史文章

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

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

购买将消耗【10

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

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字