zoukankan      html  css  js  c++  java
  • JavaScript ES6 class实例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JavaScript ES6 class实例</title>
    </head>
    <body>
        <script type="text/javascript">
            let say = 'say';
            class Person {
                constructor(x, y) {
                    this.x = x;
                    this.y = y;
                }
    
                toString() {
                    return (this.x + '的年龄是' + this.y + '岁')
                }
    
                [say]() {
                    return '你好';
                }
            }
            var person = new Person('徐同保', 28);
            console.log(person.toString()); //徐同保的年龄是28岁
            console.log(typeof Person);   //function
            console.log(Person === Person.prototype.constructor);  //true
            console.log(person.constructor ===Person.prototype.constructor);  //true
            Object.assign(Person.prototype, {
                getSex() {
                    return 'man';
                }
            })
            console.log(Object.keys(Person.prototype));  //["getSex"]
            console.log(Object.getOwnPropertyNames(Person.prototype));  //["constructor", "toString", "say", "getSex"]
            console.log(person.say());  //你好
            //下面结果说明对象上有x,y属性,但是没有toString属性。也就是说x,y是定义在this对象上,toString定义在类上。
            console.log(person.hasOwnProperty('x'));  //true
            console.log(person.hasOwnProperty('y'));  //true
            console.log(person.hasOwnProperty('toString'));  //false
            console.log(person.__proto__.hasOwnProperty('toString'));  //true
            let person1 = new Person('李雷', 27);
            console.log(person.__proto__ === person1.__proto__)  //true
            person.__proto__.say2 = function () {
                return '欢迎';
            }
            console.log(person.say2());  //欢迎
            console.log(person1.say2());  //欢迎
    
            const Expression = class Expre{
    
                static getAge(){
                    return '12';
                }
    
                getClassName(){
                    return "ClassName1= " +Expre.name + " ClassName2= " +Expression.name;
                }
    
            }
            let exp = new Expression();
            //let exp = new Expre();  //错误
            console.log(exp.getClassName());  //ClassName1= Expre ClassName2= Expre
            //console.log(Expre.getAge());  //错误
            console.log(Expression.getAge());  //12
    
            //立即执行
            let person2 = new class{
                constructor(props) {
                    this.props = props;
                }
                getProps(){
                    return this.props;
                }
    
            }('xutongbao');
            console.log(person2.getProps());//xutongbao
    
            class Student extends Person {
                constructor(name, age) {
                    super(name, age);
                }
                study() {
                    return '正在学习';
                }
            }
    
            let student = new Student('徐同保', 28);
            console.log(student.toString());  //徐同保的年龄是28岁
            console.log(student.study());     //正在学习
        </script>
    </body>
    </html>


  • 相关阅读:
    git rebase 还是 merge的使用场景最通俗的解释
    漏洞复现:Struts2 远程代码执行漏洞(S2-033)
    linux临时网络配置
    漏洞复现:Struts2 S2-032 漏洞环境
    XXE攻击学习
    启用了不安全的HTTP方法【转】
    HTTP参数污染【转】
    逻辑漏洞挖掘方式
    大漏洞时代下的僵尸网络追踪-笔记
    markdown入门杂记
  • 原文地址:https://www.cnblogs.com/xutongbao/p/9924949.html
Copyright © 2011-2022 走看看