现在位置首页 / 前端开发 /正文

javascript的类是怎么回事

作者: IT小兵 | 2016年1月20日| 热度:℃ | 评论: |参与:

js类的基本含义

我们知道,在js中,是没有类的概念的。类的所有实例对象都从同一个原型对象上继承属性,因此,原型对象是类的核心。

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。———百度百科

早期的javascript需求都很简单,基本都是写成函数的,然后是面向过程的写法,后来慢慢的引入面向对象开发思想,再后来就慢慢写成 

js中,写成类的本质基本都是 构造函数+原型。下面,就讨论一下js类的几种写法:

构造函数 法

  /**
    * Person类:定义一个人,有name属性和getName方法
   */    <script>
        function Person(name){          
          this.name = name;      
              this.getName = function(){
                              return this.name;
            }
        }        //我们在这里实例化几个对象
        var p1 = new Person("trigkit4");     
           var p2 = new Person("mike");     
              console.log(p1 instanceof Person);//true
        console.log(p2 instanceof Person);//true
    </script>

由上面控制台输出结果可知,p1和p2的确是类Person的实例对象。instanceof操作符左边是待检测类的对象,右边是定义类的构造函数。这里,instanceof用来检测对象p1是否属于Person类。

这种方式的优点是:我们可以根据参数来构造不同的对象实例 ,缺点是每次构造实例对象时都会生成getName方法,造成了内存的浪费 。

我们可以用一个外部函数来代替类方法,达到了每个对象共享同一个方法。改写后的类如下:

//外部函数<script>
    function getName() {  
          return this.name;
    }    function Person(name)
    {        this.name = name; 
           this.getName = getName;//
    }</script>

原型方式

<script>
    function Person(){};
    Person.prototype.name = "trigkit4";//类的属性都放在prototype上
    Person.prototype.getName = function(){        return " I'm " + this.name;
    }    var p1 = new Person();    var p2 = new Person();    console.log(p1.name);//trigkit4
    console.log(p2.getName());//I'm trigkit4</script>

原型方式的缺点就是不能通过参数来构造对象实例 (一般每个对象的属性是不相同的) ,优点是所有对象实例都共享getName方法(相对于构造函数方式),没有造成内存浪费 。

构造函数+原型方式

取前面两种的优点:
a、用构造函数来定义类属性(字段)。
b、用原型方式来定义类的方法。

<script>
    function Person(name){        this.name = name;
    }    //原型的特性可以让对象实例共享getName方法
    Person.prototype.getName = function(){        return " I'm " + this.name;
    }</script>

这样,我们就既可以构造不同属性的对象,也可以让对象实例共享方法,不会造成内存的浪费。

为了让js代码风格更紧凑,我们让prototype方法代码移到function Person的大括号内。

<script>
    function Person(name){     
       this.name = name;
        Person.prototype.getName = function(){
                    return this.name;
        }
    }    var p1 = new Person('trigkit4');   
     console.log(p1.getName());//trigkit4
     </script>


点击阅读本文所属分类的更多文章: 前端开发 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:suchso@vip.qq.com

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

抢天猫双11红包
推荐使用阿里云服务器
echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:suchso@vip.qq.com

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询