资讯专栏INFORMATION COLUMN

JavaScript类的写法

OnlyLing / 219人阅读

摘要:在中,写成类的本质基本都是构造函数原型。操作符左边是待检测类的对象,右边是定义类的构造函数。不宜用在这里,我们需要知道的几种定义类的方法,除了上面的构造函数外,还有方法用这个方法,类就是一个对象,而不是函数。

js类的基本含义

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

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

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

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

构造函数 法
/**
* Person类:定义一个人,有name属性和getName方法
   */

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

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

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

//外部函数
原型方式

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

构造函数+原型方式

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


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

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


在这里,我们需要知道的几种定义类的方法,除了上面的构造函数外,还有:

Object.create()方法

用这个方法,"类"就是一个对象,而不是函数。

 var Person = {
        name : "trigkit4",
        age : 21,
        run:  function(){
            alert("I like running");
        }
    }

然后,直接用Object.create()生成实例,不需要用到new。

var p1 = Object.create(Person);
    alert(p1.age);//21
    p1.run();//I like running

这种方法比"构造函数法"简单,但是不能实现私有属性和私有方法,实例对象之间也不能共享数据,对"类"的模拟不够全面。

createNew()方法

这种方法不需要用到this和prototype,其做法是用对象来模拟一个类,然后在类里面定义一个构造函数createNew(),然后在createNew()里面定义实例对象,把这个实例对象作为返回值。

使用的时候,调用createNew()方法,就可以得到实例对象。

 var p1 = Person.createNew();
    p1.run();//I like running

这种写法其实和对象字面量的写法是很类似的,只不过一个是逗号分隔,一个是分号分隔。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85332.html

相关文章

  • JavaScript的es6的class使用

    摘要:记录的学习笔记,在回答别人的问题时发现自己的的理解误差很大的在没有带来的的时候,我们编写的时候很多时候会通过构造函数和原型链来添加方法属性,实现的功能。而是看成是构造函数的写法。等同于类的实例对象就像使用构造函数一样使用命令来创建一个实例。 记录class的学习笔记,在回答别人的问题时发现自己的的理解误差很大 javascript的class 在没有es6带来的class的时候,我们编...

    zgbgx 评论0 收藏0
  • JavaScript 的对象继承方式,有几种写法

    摘要:四混合方式对象冒充的主要问题是必须使用构造函数方式,这不是最好的选择。在中创建类的最好方式是用构造函数定义属性,用原型定义方法。注意,虽然代表了父类的构造函数,但是返回的是子类的实例,即内部的指的是,因此在这里相当于。 一、对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,所以可使 Parent 构造函数 ...

    gggggggbong 评论0 收藏0
  • 对象的继承(原型链)

    摘要:规定,每个函数都有一个属性,指向一个对象大毛二毛构造函数的属性,就是实例对象和的原型对象。这就是所有对象都有和方法的原因,因为这是从继承的构造函数的属性指向一个数组,就意味着实例对象可以调用数组方法。 目录 [隐藏] 原型对象概述构造函数的缺点prototype 属性的作用原型链constructor 属性instanceof 运算符构造函数的继承多重继承模块基本的实现方法封装私有变量...

    big_cat 评论0 收藏0
  • 《深入理解ES6》笔记—— JavaScript中的类class(9)

    摘要:新建一个类该函数返回一个类的实例给函数传入通过立即调用类构造函数可以创建单例。派生类是指继承自其它类的新类。在构造函数中访问之前要调用,负责初始化。在构造函数中使用通常表示当前的构造函数名。 ES5中的近类结构 ES5以及之前的版本,没有类的概念,但是聪明的JavaScript开发者,为了实现面向对象,创建了特殊的近类结构。 ES5中创建类的方法:新建一个构造函数,定义一个方法并且赋值...

    gggggggbong 评论0 收藏0

发表评论

0条评论

OnlyLing

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<