如何用JavaScript定义一个类

 更新时间:2014年09月12日 10:46:42   投稿:hebedich  
其实Javascript中没有类这个定义,但是有类这个概念。很多人都写过这样的代码,就是一个关键字 function,然后定义一个方法名,方法名后紧跟一对括号。如果你在项目中写过这样的代码,那么祝贺你,你可以不费任何吹毛之力,就能一口气读完这篇文章了。

我原来的写法都是这样:

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中将数组进行合并的基本方法讲解

    这篇文章主要介绍了JavaScript中将数组进行合并的基本方法讲解,包括快速合并多个数组的方法,需要的朋友可以参考下
    2016-03-03
  • Document对象内容集合(比较全)

    Document对象内容集合(比较全)

    这个是脚本之家从网上收集的比较全的Document对象内容集合,Document对象是js编写中经常用到的对象。了解它方便以后的学习。
    2010-09-09
  • 详解JavaScript中的表单验证

    详解JavaScript中的表单验证

    这篇文章主要介绍了JavaScript中的表单验证,是JS在前端和服务器端通信部分相关的重要知识,需要的朋友可以参考下
    2015-06-06
  • 浅谈JavaScript数组简介

    浅谈JavaScript数组简介

    本文主要是给大家简单介绍了Array的相关基础知识,到这里也算是能对Array有更全面的理解了,希望大家能够喜欢,后续我们将继续介绍关于array的内容。
    2021-11-11
  • 详解JavaScript设计模式开发中的桥接模式使用

    详解JavaScript设计模式开发中的桥接模式使用

    桥接模式的适用场合非常广泛,除了在事件回调函数与接口之间进行桥接外,桥接模式也可以用于连接公开的API代码和私用的实现代码,下面我们就来详解JavaScript设计模式开发中的桥接模式使用
    2016-05-05
  • JavaScript DOM基础

    JavaScript DOM基础

    这篇文章主要介绍了JavaScript的DOM基础知识,需要的朋友可以参考下
    2015-04-04
  • javascript设计模式之鸭子类型和多态

    javascript设计模式之鸭子类型和多态

    这篇文章主要为大家介绍了javascript鸭子类型和多态,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2022-01-01
  • 做网页的一些技巧

    做网页的一些技巧

    做网页的一些技巧...
    2007-02-02
  • 深入解析contentWindow, contentDocument

    深入解析contentWindow, contentDocument

    没有永恒的技术只有需求,没有好说的客户只有无奈的开发者,如果iframe的出现是一个错误的话,iframe里边在来一个iframe那是错上加错,神话没有在远古的尘嚣中消失,却在怀具的今天不断上演
    2013-07-07
  • JavaScript中for循环的使用详解

    JavaScript中for循环的使用详解

    这篇文章主要介绍了JavaScript中for循环的使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下
    2015-06-06

最新评论