概述

经典的老书害人啊,全是讨论怎么解决javascript里面用函数形式定义类的坑。结果es2015直接用class关键字解决了所有问题。虽然class关键字没有什么新东西,只是js现有继承结构的语法糖,但是用起来真的很方便。我把它们记录下来,供以后开发时参考,相信对其他人也有用。

参考:MDN ClassesMDN class declarationMDN class expressionMDN function declarationMDN function expression

定义一个类

有以下四种方式定义一个类:

  1. es2015规定的,类声明,只能定义一次,不然会报错,没有hoisting,推荐使用
  2. es2015规定的,类表达式,可以定义多次,后面覆盖前面的,没有hoisting,不推荐使用。
  3. 函数声明,有hoisting,不推荐使用。
  4. 函数表达式,没有hoisting,不推荐使用。
//类声明,推荐
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
} //类表达式,不推荐
var Rectangle = class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
}; //函数声明,不推荐
function Rectangle() {
this.height = height;
this.width = width;
} //函数表达式,不推荐
var Rectangle = function() {
this.height = height;
this.width = width;
}

类中的属性和方法

类中有静态和实例的属性和方法。相关的定义如下所示:

//es2015中类的定义方式,推荐
class Animal {
//constructor是静态方法,在里面定义实例属性(我们不需要静态属性)
constructor(x, y) {
this.x = x;
this.y = y;
} //实例方法
speak() {
return this;
} //静态方法
static eat() {
return this;
}
} //函数形式,不推荐
function Animal(x, y) {
this.x = x;
this.y = y;
};
Animal.prototype.speak = function() {
return this;
}
Animal.eat = function() {
return this;
}

需要注意的是,es2015中类的定义方式中的this会指向undefined;而函数方式中的this会指向全局对象

//es2015中类的定义方式
let obj = new Animal();
obj.speak(); // Animal {}
let speak = obj.speak;
speak(); // undefined Animal.eat() // class Animal
let eat = Animal.eat;
eat(); // undefined //函数方式
let obj = new Animal();
let speak = obj.speak;
speak(); // global object let eat = Animal.eat;
eat(); // global object

静态和实例的区别

静态类型和实例类型的区别如下:

  1. 静态类型:类可以直接调用的类型(不能被实例直接调用),在内存中只占一块区域,创建实例时不额外分配内存。
  2. 实例类型:实例调用的类型,每创建一个实例,都会在实例中分配一块内存。

js中的类的更多相关文章

  1. JS中定义类的方法

    JS中定义类的方式有很多种: 1.工厂方式    function Car(){     var ocar = new Object;     ocar.color = "blue" ...

  2. JS中定义类的方法<转>

    转载地址:http://blog.csdn.net/sdlfx/article/details/1842218 PS(个人理解): 1) 类通过prototype定义的成员(方法或属性),是每个类对象 ...

  3. js中的类和对象以及自定义对象

    js中的类 1.类的声明 function Person(name,age){ this.name=name; this.age=age; this.test=function(a){ alert(a ...

  4. js中尺寸类样式

    js中尺寸类样式 一:鼠标尺寸类样式 都要事件对象的配合 Tip:注意与浏览器及元素尺寸分开,鼠标类尺寸样式都是X,Y,浏览器及元素的各项尺寸时Height,Width 1:检测相对于浏览器的位置:e ...

  5. koa 基础(十七)原生 JS 中的类、静态方法、继承

    1.app.js /** * 原生 JS 中的类.静态方法.继承 * es5中的类和静态方法 */ function Person(name, age) { // 构造函数里面的方法和属性 this. ...

  6. 总结:js中4类修改样式的方法

    前言 最近在写一个扩展右键菜单的插件,既然是插件,想着一步到位,把相关的style样式设置都丢进js文件中,直接加载一个js文件便可以使用该插件,所以今天就研究了下js批量的插入样式的方法,即addS ...

  7. js中有关类、对象的增强函数

    javascript中继承的实现 基础实现 function Range(from,to){ this.from =from; this.to =to; } Range.prototype = { i ...

  8. js中对象 类 实例的区别 数据类型 创建对象

    类是对象的具体细分,实例是类中的一个具体事物. 基本数据类型和 引用数据类型 基本数据类型:numble string undefined null 引用数据类型:对象和函数 对象数据类型又细分为:对 ...

  9. js中的类数组对象---NodeList

    动态 NodeList 这是文档对象模型(DOM,Document Object Model)中的一个大坑. NodeList 对象(以及 HTML DOM 中的 HTMLCollection对象)是 ...

随机推荐

  1. Android 查阅博客2_APT

    https://mp.weixin.qq.com/s/3zrAzOUGpovRRbuYnce3uw APT(Annotation Processing Tool) 即注解处理器,是一种注解处理工具,用 ...

  2. OKHttp使用详解

    一,OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络. 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和Leak ...

  3. Jekins在Tomcat上的安装和配置

    首先,apache.org的官网下载Apache Tomcat. 第二:点击/一步一步的安装tomcat,没有任何需要说明的难点. 我偏好选择安装tomcat可执行文件,这样可以在安装时就自动吧tom ...

  4. etcd集群部署与遇到的坑

    在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一下,为了以后更好操作. ETCD参数说明 —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群 ...

  5. toastr简单用法及修改垂直居中

    toastr是一个基于Jquery简单.漂亮的消息提示插件,使用简单.方便,可以根据设置的超时时间自动消失. 1.使用很简单,首选引入toastr的js.css文件html <script sr ...

  6. 微信小程序——微信卡券的领取和查看

    这里大致介绍下微信卡券的一些常见问题,不再介绍具体技术了,相关接口详见微信卡券. 1. 会员卡跟卡券一样么? 这个是一样的,至少在前端是一样处理的,最多也就是卡券设置展示不同.对于微信卡券领取和查看的 ...

  7. 微擎开发------day01

    微擎的数据常量 $_GPC   -- 全局请求变量 类型: array 说明: 合并请求参数, 包括 $_GET, $_POST, $_COOKIE的内容. 相同键名覆盖规则为 $_COOKIE 覆盖 ...

  8. node.js中fs文件系统模块的使用

    node.js中为我们提供了fs文件系统模块,实现对文件或目录的创建,修改和删除等操作. fs模块中,所有的方法分为同步和异步两种实现. 有 sync 后缀的方法为同步方法,没有 sync 后缀的方法 ...

  9. vue.$nextTick 解决了哪些问题

    转载:https://www.cnblogs.com/xuewuhen/p/7860989.html $nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $next ...

  10. ant 执行java文件,java文件中含中文,显示乱码

    在build.xml文件run target下添加下面一行 <sysproperty key="file.encoding" value="UTF-8" ...