• 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;
  • 相关阅读:
    多项式的一些操作
    AtCoder Grand Contest 036E
    THUWC2017 随机二分图
    THUWC2017 在美妙的数学王国中畅游
    SDOI2017 切树游戏
    ZJOI2017 树状数组
    HNOI2015 接水果
    LOJ6503 Magic
    Charles 抓去app接口的使用
    mysql 字符串类型和数字对比的坑
  • 原文地址:https://www.cnblogs.com/aqigogogo/p/7573757.html
Copyright © 2020-2023  润新知