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

《悟透JavaScript》学习札记六之放下对象

2011-07-21 19:58 176 查看
Codes: function WhoAmI()
{
alert("I'm " + this.name + " of " + typeof(this));
};
WhoAmI(); // output: I'm of object
// 此时this是根对象window,其name属性为空字符串
var Bill = {name: "Bill"};
Bill.WhoAmI = WhoAmI; // 将函数WhoAmI作为BillGates的方法。
Bill.WhoAmI(); // this是Bill,output: I'm Bill of object
var Sam = {name: "Sam"};
Sam.WhoAmI = WhoAmI;
Sam.WhoAmI(); // output: I'm Sam of object
WhoAmI.call(Bill); //output: I'm Bill of object
WhoAmI.call(Sam); // output: I'm Sam of object
Bill.WhoAmI.call(Sam); // 将Sam作为this,却调用Bill的方法。output: I'm Sam of object
Sam.WhoAmI.call(Bill); // 将Bill作为this,却调用Sam的方法。output: I'm Bill of object
WhoAmI.WhoAmI = WhoAmI; // 将WhoAmI函数设置为自身的方法。
WhoAmI.name = "WhoAmI";
WhoAmI.WhoAmI(); // 此时的this是WhoAmI函数自己。output: I'm WhoAmI of object
({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); // 创建一个匿名对象并调用其方法。output: I'm nobody of object
以上代码可以看出,this并不一定是函数本身所属的对象。在JavaScript函数中,你只能把this看成当前要服务的“这个”对象。在一般对象语言中,方法体代码中的this可以省略,成员默认都首先是“自己”的。但JavaScript却不同,由于不存在“自我”,当访问“这个”对象时,this不可省略。
注:self属性表示网页结构的当前window对象,以及frame或iframe元素的window对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: