前言

大家都知道, 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
推荐文章
  • 黄帝内经-第27篇-离合真邪篇(3)

  • remote: error: cannot run hooks/post-receive: No such file or directory

  • freshrss设置api登录,用来连接其他客户端

  • nodejs的正则.*? 和 .*的区别

  • 黄帝内经-第28篇-通评虚实论篇(3)

  • 黄帝内经-第41篇-刺腰痛篇(3)

  • 黄帝内经-第十八篇-平人气象论篇(1)

  • Docker容器的重启策略

评论 共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字