如何用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 相关文章推荐
用js实现的抽象CSS圆角效果!!
May 03 Javascript
js substr支持中文截取函数代码(中文是双字节)
Apr 17 Javascript
javascript解析json数据的3种方式
May 08 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
Feb 21 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
Nov 10 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
Mar 23 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
Jul 28 Javascript
vue自定义底部导航栏Tabbar的实现代码
Sep 03 Javascript
javascript实现计算指定范围内的质数示例
Dec 29 Javascript
js中Function引用类型常见有用的方法和属性详解
Dec 11 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
webpack+vue-cil 中proxyTable配置接口地址代理操作
Jul 18 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注入实例
2006/10/09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
php 字符转义 注意事项
2009/05/27 PHP
PHP中$_SERVER的详细参数与说明介绍
2013/10/26 PHP
thinkPHP实现表单自动验证
2014/12/24 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
初学Javascript的一些总结
2008/11/03 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
python实现对输入的密文加密
2019/03/20 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
python实现日志按天分割
2019/07/22 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
历史专业个人求职信范文
2013/12/07 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书