首先请看如下代码:
function WhoAmI() //定义一个函数WhoAmI
{
alert("I'm " + this.name + " of " + typeof(this));
};
var BillGates = {name: "Bill Gates"};
BillGates.WhoAmI = WhoAmI; //将函数WhoAmI作为BillGates的方法。
BillGates.WhoAmI(); //此时的this是BillGates。输出:I'm Bill Gates of object
({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并设置属性后调用WhoAmI方法。输出:I'm nobody of object
关于上面创建的匿名对象有两点疑问:
1.为什么要使用小括号包起来?
2.临时创建的匿名对象并没有创建自己的WhoAmI方法,为什么可以直接调用WhoAmI方法?
function WhoAmI() //定义一个函数WhoAmI
{
alert("I'm " + this.name + " of " + typeof(this));
};
var BillGates = {name: "Bill Gates"};
BillGates.WhoAmI = WhoAmI; //将函数WhoAmI作为BillGates的方法。
BillGates.WhoAmI(); //此时的this是BillGates。输出:I'm Bill Gates of object
({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并设置属性后调用WhoAmI方法。输出:I'm nobody of object
关于上面创建的匿名对象有两点疑问:
1.为什么要使用小括号包起来?
2.临时创建的匿名对象并没有创建自己的WhoAmI方法,为什么可以直接调用WhoAmI方法?
2.第二个应该可以改成这样 ({name: "nobody", WhoAmI: function(){{alert("I'm " + this.name + " of " + typeof(this));}}}).WhoAmI(); 匿名对象中已经有一个属性(实际上是一个方法)WhoAmI指向了外部的WhoAmI方法的一个引用.当调用WhoAmI()时,所以会出现当前的结果。期待高手进一步解释
1.小括号括起来是强制运算,让引擎识别是个对象
如果没有小括号{name: "nobody", WhoAmI: WhoAmI}.XXX 引擎会把{}解析成块语句而不是对象就报错
所以下面强制运算符都可以
-{name: "nobody", WhoAmI: WhoAmI}.WhoAmI();
+{name: "nobody", WhoAmI: WhoAmI}.WhoAmI();
void{name: "nobody", WhoAmI: WhoAmI}.WhoAmI();
typeof{name: "nobody", WhoAmI: WhoAmI}.WhoAmI();
2.你的问题表示你来对象基本概念都不知道
WhoAmI: WhoAmI这个不就是WhoAmI方法? 相当于
WhoAmI: function(){
alert("I'm " + this.name + " of " + typeof(this));
};
由于急切寻找类似于这样的赋值语句BillGates.WhoAmI = WhoAmI;
所以({name: "nobody", WhoAmI: WhoAmI}).WhoAmI();
红色部分没有看到,呵呵.....
以后要仔细了!