接 悟透JavaScript之放下对象 -- 1
WhoAmI.call(BillGates); //直接将BillGates 作为this,调用WhoAmI。输出:I'm B
ill Gates of object
WhoAmI.call(SteveJobs); //直接将SteveJobs 作为this,调用WhoAmI。输出:I'
m Steve Jobs of object
BillGates.WhoAmI.call(SteveJobs); //将SteveJobs 作为this,却调用BillGates 的
WhoAmI 方法。输出:I'm Steve Jobs of object
SteveJobs.WhoAmI.call(BillGates); //将BillGates 作为this,却调用SteveJobs 的
WhoAmI 方法。输出:I'm Bill Gates of object
WhoAmI.WhoAmI = WhoAmI; //将WhoAmI 函数设置为自身的方法。
WhoAmI.name = "WhoAmI";
WhoAmI.WhoAmI(); //此时的this 是WhoAmI 函数自己。输出:I'm WhoA
mI of function
({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并
设置属性后调用WhoAmI 方法。输出:I'm nobody of object
从上面的代码可以看出,同一个函数可以从不同的角度来调用,this 并不一定是函数本身所属的对象。
this 只是在任意对象和function 元素结合时的一个概念,是种结合比起一般对象语言的默认结合更加灵
活,显得更加超然和洒脱。
在 JavaScript 函数中,你只能把this 看成当前要服务的“这个”对象。this 是一个特殊的内置参数,根据this 参数,您可以访问到“这个”对象的属性和方法,但却不能给this 参数赋值。在一般对象语言中,方法体代码中的this 可以省略的,成员默认都首先是“自己”的。但JavaScript 却不同,由于不存在“自我”,
当访问“这个”对象时,this 不可省略!
JavaScript 提供了传递this 参数的多种形式和手段,其中,象BillGates.WhoAmI()和SteveJobs.
WhoAmI()这种形式,是传递this 参数最正规的形式,此时的this 就是函数所属的对象本身。而大多数
情况下,我们也几乎很少去采用那些借花仙佛的调用形式。但只我们要明白JavaScript 的这个“自我”与其
他编程语言的“自我”是不同的,这是一个放下了的“自我”,这就是JavaScript 特有的世界观。