zoukankan      html  css  js  c++  java
  • es6-class

     /*类的数据类型就是函数,类本身就指向构造函数*/
        class Point {
            constructor(x, y) {
                this.x = x;
                this.y = y;
                console.log(this);
            }
    
            fn() {
                return this.x + this.y
            }
        }
        let a = new Point(1, 2);
        console.log(a.fn === a.fn)
        console.log(Point.prototype)
    
        class Man {
            constructor(name, age) {
                console.log(`Man类的this指向+${this}`, this);
                this.name = name;
                this.age = age;
            }
    
            say() {
                return this.name+this.age;
    
            }
        }
        let hxq = new Man('hxq', 18);
        console.log('hxq实例', hxq);
        console.log(hxq.__proto__);
        console.log(Man.prototype);
        console.log(Man.prototype===hxq.__proto__)  //true
        console.log(hxq.say===Man.prototype.say) //true  类的实例上调用方法其实就是调用原型上的方法
        console.log(Man.prototype);
    
    //    Object.assign(Man.prototype,{}) 用来一次性给原型添加多种方法
        Object.assign(Man.prototype,{
            eat(){},
            drink(){}
        })
        console.log(Man);
        console.log(Object.getOwnPropertyNames(hxq.__proto__))//["constructor", "say", "eat", "drink"]


     /*
        * 所有类的实例共享一个原型对象
        * class的类不存在变量提升与es5异 在类上方实例化一个对象会报错(let也不存在变量提升)*/
        class Man{
            constructor(name,age){
                /*写在这里面的是自身的属性可用hasOwnProperty()检测*/
                this.name=name;
                this.age=age;
                console.log('constructor里的函数自动执行')
    //            return Object.create(null);//改变Man里this的指向 constructor返回一个全新的对象导致hxq不是man的实例
            }
            say(){
                return this.name+this.age
            }
    
        }
        let hxq=new Man('hxq',28);
        console.log(hxq instanceof Man);//hxq是来自Man的实例
        console.log(hxq.say())

     __proto__ and prototype 绕来绕去


    class People { constructor(name, age) {
    this.name = name; this.age = age; } say() { return this.name + this.age; } } class Man extends People { constructor(name, age,drink) { super(name, age);//如果没有super(),在实例化对象的时候会报错;其中的this就继承自父级;如在super()上方使用this则会报错 this.drink=drink; } } var hxq = new Man('xhq', 18); console.log(hxq);//Man {name: "xhq", age: 18} console.log(Man.prototype.constructor===Man); console.log(hxq.__proto__);//实例的对象的__proto__===其构造函数的prototype console.log(Man.prototype.constructor.__proto__);//与下相等 console.log(Man.__proto__);//子级原型上的构造函数的__proto__指向父级的构造函数 (是一个函数) console.log(hxq instanceof People);//true; console.log(hxq instanceof Man);//true;
  • 相关阅读:
    生成函数
    FFT【快速傅里叶变换】FWT【快速沃尔什变换】
    牛客网多校赛第9场 E-Music Game【概率期望】【逆元】
    hdu6393Traffic Network in Numazu【树状数组】【LCA】
    hdu 6395Sequence【矩阵快速幂】【分块】
    hdu6390GuGuFishtion【数论】
    欧拉函数和莫比乌斯函数
    hdu4614 Vases and Flowers【线段树】【二分】
    hdu4578 Transformation【线段树】
    hdu3974 Assign the task【线段树】
  • 原文地址:https://www.cnblogs.com/aqigogogo/p/7573757.html
Copyright © 2011-2022 走看看