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

posted @ 2016-08-21 17:59  晴晴加油  阅读(1038)  评论(0编辑  收藏  举报