| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1243 人关注过本帖
标题:ECMAScript 3rd阅读笔记之二——js中的晚绑定和极晚绑定
只看楼主 加入收藏
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
收藏
 问题点数:0 回复次数:1 
ECMAScript 3rd阅读笔记之二——js中的晚绑定和极晚绑定
js中的晚绑定和大多数语言(比如c++)中的晚绑定概念一样,简单的说,就是动态地引用不同的实例的同名方法(或属性),例如代码:

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

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

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

  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链机制,请参看另一篇文章《ECMAScript 3rd阅读笔记之一–js prototype链解惑》)。

[此贴子已经被作者于2007-11-19 9:55:35编辑过]

搜索更多相关主题的帖子: js中 绑定 ECMAScript 笔记 class 
2007-11-16 17:51
suncf1985
Rank: 2
等 级:论坛游民
威 望:1
帖 子:158
专家分:35
注 册:2007-10-11
收藏
得分:0 

在你的个人技术网站看过了!不错!

以后要靠你带领大家了,哈哈


以后:独自享受着快乐、品味着孤独、体会着没有回忆的回忆....
2007-11-19 15:18
快速回复:ECMAScript 3rd阅读笔记之二——js中的晚绑定和极晚绑定
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032574 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved