javascript中定义私有方法说明(private method)


Posted in Javascript onJanuary 27, 2014

一度以为在javascript的世界里,所有方法都是公有的,无法真正从技术上定义一个私有方法,今天又一次发现:其实我错了!

var Person = function(name,sex){ 
    this.name = name; 
    this.sex = sex;      
    var _privateVariable = "";//私有变量     
    //构造器中定义的方法,即为私有方法 
    function privateMethod(){    
        _privateVariable = "private value"; 
        alert("私有方法被调用!私有成员值:" + _privateVariable);              
    } 
    privateMethod(); //构造器内部可以调用私有方法             
} Person.prototype.sayHello = function(){ 
    alert("姓名:" + this.name + ",性别:" + this.sex); 
} 
var p = new Person("菩提树下的杨过","男");       
p.sayHello(); 
//p.privateMethod();//这里将报错,私成方法无法被实例调用 
alert(p._privateVariable);//显示: undefined

说明:类的构造函数里定义的function,即为私有方法;而在构造函数里用var声明的变量,也相当于是私有变量。(不过类比于c#这类强类型语言中的私有成员概念还是有区别的,比如无法在非构造函数以外的其它方法中调用)

类似的,我们还能实现类似set,get属性的封装

var Person = function(){     
    var salary = 0.0;     this.setSalary = function(value){ 
        salary = value; 
    } 
    this.getSalary = function(){ 
        return salary; 
    } 
} 
var p = new Person(); 
p.setSalary(1000); 
alert(p.getSalary());//返回1000 
alert(p.salary);//返回undefined

注:js中的"变量作用域","函数调用上下文(this)","闭包","原型链"这几个概念确实值得花点工夫理解,这几道坎跨过去了,js新手(比如我辈之流)的水平相信也将小上一个新台阶.
Javascript 相关文章推荐
javascript 无提示关闭窗口脚本
Aug 17 Javascript
jquery实现metro效果示例代码
Sep 06 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
Mar 12 Javascript
jQuery点缩略图弹出层显示大图片
Feb 13 Javascript
ECMAScript6中Set/WeakSet详解
Jun 12 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
拥Bootstrap入怀——导航栏篇
May 30 Javascript
Angular Module声明和获取重载实例代码
Sep 14 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
Dec 09 Javascript
ES6新特性之函数的扩展实例详解
Apr 01 Javascript
Webpack devServer中的 proxy 实现跨域的解决
Jun 15 Javascript
详解vue中axios的封装
Jul 18 Javascript
用javascript替换URL中的参数值示例代码
Jan 27 #Javascript
jquery选择器之基本过滤选择器详解
Jan 27 #Javascript
jquery选择器之层级过滤选择器详解
Jan 27 #Javascript
jquery选择器之内容过滤选择器详解
Jan 27 #Javascript
jquery选择器之属性过滤选择器详解
Jan 27 #Javascript
jQuery自定义事件的简单实现代码
Jan 27 #Javascript
jQuery中bind与live的用法及区别小结
Jan 27 #Javascript
You might like
php全排列递归算法代码
2012/10/09 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
面向对象的Javascript之一(初识Javascript)
2012/01/20 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
Python备份Mysql脚本
2008/08/11 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
2019/04/23 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
火山动力Java笔试题
2014/06/26 面试题
数据员岗位职责
2013/11/19 职场文书
投资合作协议书
2014/04/17 职场文书
校友回访母校寄语
2015/02/26 职场文书
居委会工作总结2015
2015/05/18 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis