JavaScript 学习笔记十四 this特性,静态方法 和实例方法,prototype

 

        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(); /* a */          window.show();  /* I am window */
        //eg. 链式调用    模仿c++的 cout 输出函数cout<<aa<<bb<<cc<<endl;
        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();
        //staticClass.instanceMethod();  //语句错误,  无法运行
        new staticClass().instanceMethod(); //必须进行实例化才可以调用

        //动态原型方法的精髓在于使用 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处不输出是因为它是静态属性,不是实例属性。*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值