JavaScript中class详解:如何使用与继承,以及继承中关于ES6与ES5的区别

本文详细探讨了JavaScript中的class语法,包括class的构造、getter和setter、静态方法和私有属性等特性,并对比了ES6与ES5在继承上的差异,解析了super关键字的使用以及class的实现原理。
摘要由CSDN通过智能技术生成

46 class语法

46.1 class语法详解

1.组合模式用class

1.class里的所有方法定义在类的prototype属性上面

2.ES5构造函数Point对应ES6的Point类的构造方法

class Point{
   
    constructor(x,y){
   
        this.x=x;
        this.y=y;
    }
    
    toString(){
   
        console.log(this.x+this.y);
    }
}

let point=new Point(1,2);
toString in point 			//true
语法糖:计算机语言中添加某种语法但是面对语言的功能没有影响,更方便程序员的使用。
2.在class里添加新函数
 Point.prototype.sayx=function(){
   
            console.log(this.x);
        }

2.assign:target,source 返回target

  class Point {
   

        }
       
        Object.assign(Point, {
   
            constructor(x, y) {
   		//不先在class里写constructor,则默认不要,这里的constructor没有用,但是不报错
                this.x = x;
                this.y = y;
            },

            toString() {
   
                console.log(this.x + this.y);
            }
        })

 		let point = new Point(1, 2);
  		"constructor" in Point		//true,但是其实是不可枚举的

方法 in 构造函数 //检测可枚举属性

实例 instanceof 构造函数 //检测构造函数是谁

3.缺点:在class里定义的所有方法,看上去好像不可枚举的,

Object.keys(Point.prototype)
["sayx"]

无论是可不可遍历,reflect.keys

对象属性遍历

ES6一共有五种方法可以遍历对象属性

1.for…in

2.Object.keys(obj)

在12两个属性里面,在谷歌浏览器中对class的遍历得出的属性是不一样的

3.Object.getOwnPropertyNames(obj)

4.Object.getOwnPropertySymbols(obj)

5.Reflect.ownKeys(obj)

2.constructor

1.寄生构造模式不能用在class里,否则会创造最干净的class

class foo{
   
    constructor(){
   
        return Object.create(null);
    }
}
foo();//VM1064:1 Uncaught TypeError: Class constructor foo cannot be invoked without 'new'
  //  at <anonymous>:1:1

2.原来class里不写constructor,在Object.assign里用constructor则没有用。

3.getter和setter

4.属性名 类名表达式实现

类的属性名可以采用表达式


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值