如何用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 相关文章推荐
破除一些网站复制、右键限制
Nov 04 Javascript
JQuery切换显示的效果实例代码
Feb 27 Javascript
js innerHTML 改变div内容的方法
Aug 03 Javascript
详解JavaScript中void语句的使用
Jun 04 Javascript
JS中对Cookie的操作详解
Aug 05 Javascript
原生JS实现在线问卷调查投票特效
Jan 03 Javascript
JavaScript之Date_动力节点Java学院整理
Jun 28 Javascript
angularjs实现简单的购物车功能
Sep 21 Javascript
bootstrap日期插件daterangepicker使用详解
Oct 19 Javascript
详解基于mpvue的小程序markdown适配解决方案
May 08 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
Nov 16 Javascript
关于vue中如何监听数组变化
Apr 28 Vue.js
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中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
Python获取网页上图片下载地址的方法
2015/03/11 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python装饰器原理与用法分析
2018/04/30 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
表彰先进的通报
2014/01/31 职场文书
法人代表授权委托书
2014/04/08 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
迎七一演讲稿
2014/09/12 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL