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>
什么是成功?就是所有失败的路都走过了,只剩下一条路还没有走,这条路就叫成功!