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;
  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    How to check if one path is a child of another path?
    Why there is two completely different version of Reverse for List and IEnumerable?
    在Jenkins中集成Sonarqube
    如何查看sonarqube的版本 how to check the version of sonarqube
    Queue
    BFS广度优先 vs DFS深度优先 for Binary Tree
    Depth-first search and Breadth-first search 深度优先搜索和广度优先搜索
    102. Binary Tree Level Order Traversal 广度优先遍历
    How do I check if a type is a subtype OR the type of an object?
  • 原文地址:https://www.cnblogs.com/aqigogogo/p/7573757.html
Copyright © 2011-2022 走看看