您的位置:首页 > Web前端 > JavaScript

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

2017-05-09 00:00 716 查看
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处不输出是因为它是静态属性,不是实例属性。*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐