<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