Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3245288
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类:

2008-07-30 09:30:50

js中的晚绑定和大多数语言(比如c++)中的晚绑定概念一样,简单的说,就是动态地引用不同的实例的同名方法(或属性),例如代码:

JavaScript代码

  1. window.a=function() {};  
  2. a.prototype.method=function() {alert(‘a’);};  
  3. window.b=function() {};  
  4. b.prototype.method=function() {alert(‘b’);};  
  5. c=new window[prompt()];  
  6. alert(c.method());  

当运行时,用户在输入框里输入a,那么最后提示的就是a,而输入b,提示的就是b,这就是晚绑定。

而js中,还有一种叫做“极晚绑定” ,很少语言有支持极晚绑定。而js得prototype链机制,导致了js支持极晚绑定。示例代码如下:

JavaScript代码

  1. var a=function() {};  
  2. a.prototype.p1=1;  
  3. var b=new a();  
  4. alert(b.p1);  
  5. alert(b.p2);  
  6. a.prototype.p2=2;  
  7. alert(b.p2);    

b初始化a的一个实例,此时输出b.p1,根据prototype链接,结果是1。而第一次输出b.p2时,显示的 undefined。然后,再设置a.prototype.p2=2,此时在输出b.p2,显示的是2。所有这些就是prototype链在作怪。因为, 访问b.p1和b.p2都不是真正访问对象b中的p1属性和p2属性(因为没有语句采取b.p1=xx;b.p2=xx;来设置的对象b的属性),访问的 都是b对象沿着prototype链上的p1和p2属性,即都是a.prototype.p1和a.prototype.p2,所以在b初始化后,再设置 a.prototype.p2,就使得能够通过b.p2来访问p2属性。(如果读者不理解这里的prototype链机制,请参看另一篇文章《)。

阅读(3336) | 评论(0) | 转发(0) |
0

上一篇:理解js的类型

下一篇:语义网综述

给主人留下些什么吧!~~