>首页> IT >

es6与es5的构造函数有什么区别

时间:2022-04-25 17:16:24       来源:PHP中文网

本教程操作环境:windows10系统、ECMAScript 6.0版、Dell G3电脑。

es6与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属性指向当前的构造函数,不能在构造函数外部调用会报错,

简单的实现判断是否使用的是new关键字创建对象 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;xxFoo.x // 1上面的写法为Foo类定义了一个静态属性x ES6 明确规定,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)}}

模式区别

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

【相关推荐:javascript视频教程、web前端】

以上就是es6与es5的构造函数有什么区别的详细内容,更多请关注php中文网其它相关文章!

关键词: 构造函数 有什么区别 变量提升