关于匿名对象的创建与本身继承的属性和方法问题

浴火_凤凰 2009-11-05 10:58:45
首先请看如下代码:
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方法?
...全文
78 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Click_Me 2009-11-05
  • 打赏
  • 举报
回复

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));
};

sundotLei 2009-11-05
  • 打赏
  • 举报
回复
1.估计是js本身的语法格式
2.第二个应该可以改成这样

({name: "nobody", WhoAmI: function(){{alert("I'm " + this.name + " of " + typeof(this));}}}).WhoAmI();

匿名对象中已经有一个属性(实际上是一个方法)WhoAmI指向了外部的WhoAmI方法的一个引用.当调用WhoAmI()时,所以会出现当前的结果。

期待高手进一步解释
浴火_凤凰 2009-11-05
  • 打赏
  • 举报
回复
十分感谢楼上的!!!

由于急切寻找类似于这样的赋值语句BillGates.WhoAmI = WhoAmI;
所以({name: "nobody", WhoAmI: WhoAmI}).WhoAmI();
红色部分没有看到,呵呵.....
以后要仔细了!

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧