首先我们来了解一下类定义

类是用来描述现实事物的,由属性和行为组成。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。

constructor

一个类只能有一个constructor方法
在function定义的构造函数中,其prototype.constructor属性指向构造器自身
在class定义的类中,constructor其实也相当于定义在prototype属性上

class Pon{constructor(a) {// ...这了可以定义实例属性this.a = a;}int(){   }
}// 等同于
function Pon(){this.a = a;
}
Pon.prototype.int= function (){   }

ES6 class与ES5 构造函数区别

声明区别

ES6 中的 class 是不可以重复定义的重复定义是会报错的

ES5中的function 声明构造函数会却覆盖之前定义的方法

class没有变量提升是没有变量提升的
function 声明构造函数会却变量提升(js预编译)

枚举区别

class Point {constructor(x, y) {this.x = x;this.y = y;}int() {console.log(x,y)}
}
Object.keys(Point.prototype)
Object.getOwnPropertyNames(Point.prototype)function Point1 (x, y) {this.x = x;this.y = y;
};
Point1.prototype.int = function() {console.log(x,y)
};
Object.keys(Point1.prototype)
Object.getOwnPropertyNames(Point1.prototype)

class中定义的方法不可用Object.keys(Point.prototype)枚举到
function构造器原型方法可被Object.keys(Point.prototype)枚举到
但是不管是class还是function,constructor属性默认不可枚举

ES6中的Object.getOwnPropertyNames()可以枚举到每个属性

调用区别

class必须使用new调用,不用new调用会报错。普通构造函数不用new也可以执行。

class Point {constructor(x, y) {this.x = x;this.y = y;}int() {console.log(x,y)}
}
const p = new Point()
console.log(p)
const p1 = Point()
console.log(p1)

function Point1(x, y) {this.x = x;this.y = y;
};
Point1.prototype.int = function() {console.log(x,y)
};
const pf = new Point1()
console.log(pf)
const pf1 = Point1()
console.log(pf1)

new.target属性指向当前的构造函数,不能在构造函数外部调用会报错,

function Person(name) {console.log(new.target);if (new.target !== undefined) {this.name = name;} else {throw new Error('必须使用new生成实例');}}
}

静态属性的区别

静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性。
class内部没有静态属性,只能在外面通过类名定义

class Foo {
}
Foo.x= 1;xx
Foo.x // 1
上面的写法为Foo类定义了一个静态属性xES6 明确规定,Class 内部只有静态方法,没有静态属性。

calss的关键字static 只能在class中使用 .定义的静态方法前加static关键字。

class Point {static x = 1;static y = 2;    static int() {console.log(this.x)}
}

class Point {constructor(){static x = 1;static y = 2;}static int() {console.log(this.x)}
}

继承区别

clas使用 extends 继承,

extends 只能用于类中的定义 不能用与普通的构造函数中

super (ES6 中的要求 :子类的构造函数必须执行一次super函数。)

super有两种用法
1.直接当成函数调用,表示父类的构造
如果定义了constructor 并表示这个是子类,则必须在constructor的第一行手动调用父类的构造函数.
如果说子类不写constructor,则会有默认的构造器,自动去调用父类的构造器

 class Animal{constructor(type,name,age,sex){this.type = type;this.name = name;this.age = age;this.sex = sex;}print(){console.log(`种类 : ${this.type}`)console.log(`名字 : ${this.name}`)console.log(`年龄 : ${this.age}`)console.log(`性别 : ${this.sex}`)}}class Dog extends Animal{constructor(name,age,sex){super("犬类",name,age,sex)}}const d = new Dog("旺财",5,"公");console.log(d);d.print();

2.super如果说当成对象使用,则表示父类的原型
super.inti() 这表示调用父类的inti方法

 class Dog extends Animal{print(){   //super.print();}}const d = new Dog("旺财",5,"公");console.log(d);d.print();//和普通构造函数一样父类和自身都拥有相同的属性名优先使用自身的

语言模式区别

类总是使用严格模式的。这意味着类构造中的所有代码都自动处于严格模式

ES6class与ES3构造函数区别相关推荐

  1. C++赋值运算符和拷贝构造函数区别

    •由于目标对象可能引用了以前分配的数据,所以函数应使用delete[]来释放这些数据. •函数应当避免将对象赋给自身:否则给对象重新赋值前,释放内存操作可能删除对象的内容. •函数返回一个指向调用对象 ...

  2. [转载] 深层复制构造函数和浅层复制构造函数区别

    参考链接: Python复制(深层复制和浅层复制) 构造函数用来初始化对象的,复制构造函数是把一个已知的对象复制给新的对象,(2者都是对象). 浅复制构造函数只复制指针(换句话说就是2个对象的地址一样 ...

  3. 什么是java构造函数_什么是java构造函数

    构造函数是面向对象中的一员,构造函数可以叫做构造器,它的函数名与类名相同,不用定义返回值类型,也没有具体的返回值.构造函数是在构建创造时对象时调用函数,作用是可以给对象进行初始化,创建对象都必须要通过 ...

  4. Java构造函数的深入理解

    我们人出生的时候,有些人一出生之后再起名字的,但是有些人一旦出生就已经起好名字的.那么我们在 java 里面怎么在对象一旦创建就赋值呢? public class Person {String nam ...

  5. c++ 构造函数数组_从 JS 数组操作到 V8 array.js

    前言 最近在写面试编程题,经常用到数组,经常想偷个懒,用它提供的方法,奈何还是对数组方法使用不熟练,导致写了很多的垃圾代码,很多地方稍加修改的话肯定变得简洁高效优雅? 所以✍这篇文章本着了解一下Jav ...

  6. 初探Object Pascal的类(三)

    类的构造函数 Object Pascal中的类有一种特殊的方法叫构造函数. 构造函数是一种用来建立实例类的方法. 构造函数用来初始化任何类成员变量,为类分配所必须的内存,或者做任何其他初始化工作. 在 ...

  7. C# static的用法详解

    一.静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来 ...

  8. JavaScript原型与原型链(总结篇)

    系列文章推荐 JavaScript原型与原型链(基础篇) JavaScript原型与原型链(进阶篇) JavaScript原型与原型链(总结篇) 1 构造函数和实例对象 构造函数的prototype属 ...

  9. 【C++】字符串中运算符的重载问题

    字符串中运算符的重载问题 运算符的重载: 运算符的重载实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该重载的运算符时调用此函数.这个函数叫做运算符重载函数,通常为类的成员函数. ...

  10. java静态代码块的作用域_java基础之面向对象

    0. 面向对象与面向过程的区别 面向对象 如:指挥者,人,笔记本等都可以是对象,"万物皆对象" 面向过程 如:执行者 1. 面向对象的三个特征:封装,继承,多态. 以后的开发就是: ...

最新文章

  1. 建造者模式(Builder)
  2. mysql 如何将一个库的一个表的数据复制到另一个库中的一个表
  3. 写爬虫,不会正则怎么行?
  4. 【bzoj4025】二分图 LCT
  5. 物联网在环境中的应用
  6. 摄像头各参数的意义_详解:监控摄像头参数介绍说明 | 58监控网
  7. android连接程序,从Android应用程序连接到本地后端
  8. 备份微信聊天记录为 txt 格式保存(免 root)
  9. 如何将PDF文档转成Excel?
  10. 七星配资爆量强上攻创业板大阳
  11. 如何更新Nintendo Switch游戏
  12. 2017国庆 济南清北学堂 8天乐
  13. Linux 最大文件名
  14. 南京移动开发者沙龙(创业邦+果合)
  15. 非诚勿扰 11位骗子全是托 愚乐节目 愚弄观众 请勿相信节目内容
  16. red hat linux忘记root密码,Red Hat Linux忘记root密码的解决办法
  17. 基于HTML+CSS+JavaScript制作简单的大学生网页设计——我的家乡湖南
  18. 跳转go.php,go.php · 莫轻舞/go.php 站内外链跳转源码 - Gitee.com
  19. 七年级画图计算机教案,七年级信息技术教案:图像的获取与加工
  20. webgl学习六 纹理贴图

热门文章

  1. cavas的验证码效果demo
  2. java获取url后缀,以及判断是否带参数(?params=xxx)
  3. 4_04_GLib库入门与实践_指针数组
  4. 51单片机温控风扇仿真原理图 C语言程序,AT89C51单片机的电风扇控制系统设计+流程图+仿真图.doc...
  5. FXTM富拓:美数据亮眼,美元这是要涨了?
  6. signature=6bac8596b91cba298303e9d5c86a608f,2019年武汉市中考英语试题
  7. 2019CBA全明星周末大幕落下 南方明星队大比分获胜
  8. 红昭愿计算机音乐教程,红昭愿 - 音阙诗听 - 5SING中国原创音乐基地
  9. 李宇春-唐人街无损品质mp3-flac音乐歌曲网盘免费下载
  10. Python开发系列课程(14) - 玩转正则表达式