• 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;
  • 相关阅读:
    分享一个 @user 前端插件
    .net 的一个分词系统(jieba中文分词的.NET版本:jieba.NET)
    InvokeMember 使用(转http://blog.csdn.net/gooer/article/details/2927113)
    C#反射机制(转自Binfire博客)
    MVC中使用AuthorizeAttribute做身份验证操作
    javascript日期操作详解
    精通 JS正则表达式
    JavaScript 正则表达式
    Js获取当前日期时间及其它操作
    Django 模板中 变量 过滤器的使用方法
  • 原文地址:https://www.cnblogs.com/aqigogogo/p/7573757.html
Copyright © 2020-2023  润新知