首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

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

2012-06-30 
JavaScript 学习笔记十四this特性,静态方法 和实例方法,prototype?function logs(str){document.write(str

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处不输出是因为它是静态属性,不是实例属性。*/
//了解DOM function onLoad(){ var oHtml = document.documentElement; //获取都HTML对新 var oBody = oHtml.lastChild; //获取到 body 对象 oHtml.firstChild;获取的是 head对象 var oDiv = document.createElement("div");//创建div对象 var oText = document.createTextNode("Hello DOM");//创建一个文本节点 oDiv.appendChild(oText); //将文本节点放到 div 对象中 oBody.appendChild(oDiv); //将div对象(带有文件节点)放到body对象中 } //动态语音 -------eval var sJson = "{name:'ziqiu.zhang'}"; eval("var oName="+sJson); // eval()方法可以将 JSON 格式的字符转化为 JavaScript 对象 logs(oName.name); logs(eval("5+2")); //输出“7”

热点排行