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处不输出是因为它是静态属性,不是实例属性。*/