如何用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 ajax中使用jsonp的限制解决方法
Nov 22 Javascript
javascript结合CSS实现苹果开关按钮特效
Apr 07 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
js图片上传前预览功能(兼容所有浏览器)
Aug 24 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
jQuery实现checkbox的简单操作
Nov 18 jQuery
详解vue-cli之webpack3构建全面提速优化
Dec 25 Javascript
使用jQuery动态设置单选框的选中效果
Dec 06 jQuery
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
Oct 16 jQuery
js实现QQ邮箱邮件拖拽删除功能
Aug 27 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/04/28 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
2018/04/27 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
关于礼仪的演讲稿
2014/01/04 职场文书
地质灾害防治方案
2014/05/14 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
高三毕业评语
2014/12/31 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
七一晚会主持词
2015/06/29 职场文书
合理化建议书范文
2015/09/14 职场文书
节水宣传标语口号
2015/12/26 职场文书
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python