• 理解 javascript 中的对象的继承特性 、静态方法与私有变量


    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <script>
            function log(log) {
                console.log(log);
            }
            function Person() {
                {
                    var _name = "路人甲";
                    var _sex = "";
                }
                _sex = (this.sex) ? this.sex : _sex;
                _name = (this.name) ? this.name : _name;
                this.walk = function () {
                    log("这个" + _sex + "人在散步,他的名字叫:" + _name);
                }
                Person.speak = function (words) {
                    log("speaking words " + words);
                }
    
            }
            function Student() {
                {
                    Person.apply(this)
                    var _name = this.name;
                    var _count = 0;
                }
                this.study = function (lesson) {
                    _count++;
                    log("TA 的名字叫" + _name + ",TA 在学习 " + lesson);
                }
                this.score = function () {
                    log("TA 考试得分:" + _count);
                }
            }
            var person1 = new Person();
            person1.walk();
            var person2 = { "name": "仓井", "sex": "" };
            Person.apply(person2);
            person2.walk();
            log("___________________________________");
            var student = { "name": "饭岛", "sex": "" };
            Student.call(student)
            student.study("CHINESE");
            student.study("CHINESE");
            student.study("CHINESE");
            student.score();
            Object.assign(student, { "name": "小泽" })
            Student.call(student)
            student.walk();
            log(student);
            log("___________________________________");
            Person.speak("hehe");
        </script>
    </head>
    
    <body>
    </body>
    
    </html>

     Person为基类, Student 通过 Person.apply(this)  继承基类 

     类中 {}的部分 可以理解为 构造函数,可以执行一些默认值之类的 ,

    代码运行结果如下:

       _count  可以理解为内部私有变量,   保持私有变更

       注意:这里需要说明一下

    Object.assign(student, { "name": "小泽" })   前后, 
    虽然 assign 合并之后 ,对象student 已经变更,但是很遗憾,并未改变student 的行为,如walk方法
    只有对象Student.call(student) 之后,才改变了walk 方法
    这里也有必要特地说明一下  assign方法,该方法为对象并集,后加入参数优先,类似于栈的后进先出,合并后改变第一个参数对象值,看如下示例:
    const object1 = {
      a: 1,
      b: 2,
      c: 3
    };
    var object3 ={c: 4, d: 5};
    const object2 = Object.assign(object3, object1);
    console.log(object2.c, object2.d);
    // expected output: 3 5
    console.log(object1);
    console.log(object2)
    console.log(object3)
    console.log(object2===object3)
    console.log(object2==={ c: 3, d: 5, a: 1, b: 2 })

    输入结果 



  • 相关阅读:
    脏读 幻读 不可重复读
    按位与、或、异或等运算方法
    java适配器模式
    servlet/filter/listener/interceptor区别与联系
    Struts2、SpringMVC、Servlet(Jsp)性能对比 测试
    Struts2的优点与Struts1的区别:
    ITOO 第一个任务,新建界面
    导出word使用模版
    【Web前端】---js调用本地应用程序
    JQuery经典小例子——可编辑的表格
  • 原文地址:https://www.cnblogs.com/niceletter/p/10185703.html
Copyright © 2020-2023  润新知