如何用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 相关文章推荐
初试jQuery EasyUI 使用介绍
Apr 01 Javascript
Jquery练习之表单验证实现代码
Dec 14 Javascript
js判断选择的时间是否大于今天的代码
Aug 20 Javascript
了解Javascript的模块化开发
Mar 02 Javascript
JavaScript中的lastIndexOf()方法使用详解
Jun 06 Javascript
javascript自定义in_array()函数实现方法
Aug 03 Javascript
jQuery中$(function() {});问题详解
Aug 10 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
Mar 16 Javascript
使用jQuery.Pin垂直滚动时固定导航
May 24 jQuery
Javascript 编码约定(编码规范)
Mar 11 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
Sep 29 Javascript
解决vue-router路由拦截造成死循环问题
Aug 05 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爆绝对路径方法收集整理
2012/09/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
js 编程笔记 无名函数
2011/06/28 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
Python 随机生成中文验证码的实例代码
2013/03/20 Python
JSON Web Tokens的实现原理
2017/04/02 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
python批量创建指定名称的文件夹
2019/03/21 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
python openCV自制绘画板
2020/10/27 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
建筑工程技术应届生求职信
2013/11/17 职场文书
仓库班组长岗位职责
2013/12/12 职场文书
生产部经理岗位职责
2013/12/16 职场文书
情侣吵架检讨书
2014/02/05 职场文书
租房协议书怎么写
2014/04/10 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers