• JavaScript this特性,静态方法 和实例方法,prototype


    <script type="text/javascript">
        function logs(str) {
            document.write(str + "<br />")
        }
        //利用“this 指向函数调用者”的特性,可以实现链式调用。jQuery 中大部分都是链式调用
        var oName = {
            name: "aa",
            age: 999
        };
        window.name = "I am window";
    
        function showName() {
            logs(this.name);
        }
        oName.show = showName;
        window.show = showName;
        oName.show(); /* aa */
        window.show(); /* I am window */
        
        oName.showName = function() {
            logs(this.name);
            return this; // JavaScript 中的“this”是函数上下文,不是在声明时决定的,而是在调用时决定的
        };
        oName.showAge = function() {
            logs(this.age);
            return this;
        }
        oName.showName().showAge(); //  aa  999
    
        //方法  静态方法  实例方法   java 中的一样的特性 实例方法必须声明对象,对象才可以调用
        function staticClass() {}; //声明一个类
        staticClass.staticMethod = function() {
            logs("static method")
        }; //创建一个静态方法
        staticClass.prototype.instanceMethod = function() {
                logs("instance method")
        } //创建一个实例方法
        staticClass.staticMethod();  //static method
        //staticClass.instanceMethod();  //语句错误,  无法运行
        new staticClass().instanceMethod(); //必须进行实例化才可以调用  instance method
    
        //动态原型方法的精髓在于使用 prototype 声明实例方法,使用 this 声明实例属性
        function Car() {
            this.color = "none"; //实例实属
            if(typeof Car._initialized == "undefined") {
                Car.prototype.showCar = function() { //实例方法
                    logs(this.color);
                }
            }
            Car._initialized = true; //静态属性 ? 实例属性?
        }
        logs(Car.color); //undefined
        logs(Car._initialized); //undefined  ?
        var car = new Car();
        logs(car.color); //none
        logs(Car._initialized); //true      ?
        logs(car._initialized); //undefined  ?
        car.showCar(); //none
        
        /*Car._initialized是静态属性
        1 处报错, 是因为你的Car._initialized属性的赋值是在类里面, JS是解释到哪儿执行到哪儿,
        正因为如此, 当有Car的实例产生的时候, 静态属性_initialized被赋值,
        所以2处为true, 3 处不输出是因为它是静态属性, 不是实例属性。*/
    </script>

    ref:http://sblig.iteye.com/blog/1542896

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    Scapy 工具介绍
    ubuntu虚拟机使用open-vm-tools代替vmware-tools
    docker、vmware和PD的区别
    ubuntu查看OpenGL版本
    SQL Server 常用近百条SQL语句(收藏版)
    Intellij IDEA 如何去掉 @Autowired 注入警告
    awtk-linux-fb 使用 double framebuffer 闪烁的问题
  • 原文地址:https://www.cnblogs.com/yuqingfamily/p/5793178.html
Copyright © 2020-2023  润新知