如何用JavaScript定义一个类


Posted in Javascript onSeptember 12, 2014

我原来的写法都是这样:

function Dog(){
  this.name = 'hachi';
}

Dog.prototype = {
  makeNoise:function(){
    alert('wangwangwang');
  }
};

后来又看到另外一种复杂一点而且看起来好像没有必要的写法:

function Dog(){
  var privateVariable = 'secret';

  var fn = function(){
    //...
  }

  fn.prototype = {
    makeNoise:function(){
      alert('wangwangwang');
    }
  }

  return fn;
}

这里的Dog函数其实是一个 制造类 的函数,它返回了真正的Dog类。
感觉这样做的好处是更好的实现了封装。
例如这里的privateVariable就是一个私有变量:

var d = new Dog;
d.privateVariable //undefined

另外如果在第一个例子的最后加上一句:

Dog.prototype = {
  //e...WTF??
}

这样Dog就不是Dog了~

后来的理解:
上面这样新建类的方法直接重写了prototype对象。这样prototype原本内置的属性就没有了(arguments, call, apply等)。
下面这种新建类的方法好像更好一些:

var Dog = function(name){
  this.name = name;
  var privateVariable = 'you cannot see me.';
  this.getPrivate = function(){return privateVariable;};
}
Javascript 相关文章推荐
用javascript来实现动画导航效果的代码
Dec 16 Javascript
MyEclipse取消验证Js的两种方法
Nov 14 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
Aug 11 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
Jan 28 Javascript
javascript去掉代码里面的注释
Jul 24 Javascript
jquery实现可关闭的倒计时广告特效代码
Sep 02 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
详解angular中通过$location获取路径(参数)的写法
Mar 21 Javascript
jquery获取transform里的值实现方法
Dec 12 jQuery
Node.js Buffer用法解读
May 18 Javascript
Bootstrap Table实现定时刷新数据的方法
Aug 13 Javascript
ES6入门教程之Array.from()方法
Mar 23 Javascript
jquery实现类似淘宝星星评分功能实例
Sep 12 #Javascript
jquery根据锚点offset值实现动画切换
Sep 11 #Javascript
无限树Jquery插件zTree的常用功能特性总结
Sep 11 #Javascript
js通过location.search来获取页面传来的参数
Sep 11 #Javascript
Javascript中设置默认参数值示例
Sep 11 #Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
Sep 11 #Javascript
Extjs grid panel自带滚动条失效的解决方法
Sep 11 #Javascript
You might like
10 个经典PHP函数
2013/10/17 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
Stop SQL Server
2007/06/21 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
Python 内存管理机制全面分析
2021/01/16 Python
中学生学习生活的自我评价
2013/10/26 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
golang连接MySQl使用sqlx库
2022/04/14 Golang