如何用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复制对象使用说明
Jun 28 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
Oct 06 Javascript
js创建数据共享接口——简化框架之间相互传值
Oct 23 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
Dec 27 Javascript
js/jquery获取文本框输入焦点的方法
Mar 04 Javascript
详谈jQuery中的this和$(this)
Nov 13 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
Oct 27 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
使用Vue.js创建一个时间跟踪的单页应用
Nov 28 Javascript
有趣的bootstrap走动进度条
Dec 01 Javascript
vue+webpack实现异步组件加载的方法
Feb 03 Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 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
PHP 图像尺寸调整代码
2010/05/26 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
跟老齐学Python之有点简约的元组
2014/09/24 Python
用python找出那些被“标记”的照片
2017/04/20 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
StubHub德国:购买和出售门票
2017/09/06 全球购物
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
大专学生推荐信范文
2013/11/19 职场文书
化工专业推荐信范文
2013/11/28 职场文书
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
车队司机自我鉴定
2014/03/02 职场文书
工业设计专业自荐书
2014/06/05 职场文书
党性心得体会
2014/09/03 职场文书
工作收入住址证明
2014/10/28 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
MySQL创建管理LIST分区
2022/04/13 MySQL
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python