您的位置:首页 > Web前端 > JavaScript

js中的晚绑定和极晚绑定

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

1
2
3
4
5
6

window.a = function() {};

a.prototype.method = function() {alert("a");};

window.b = function() {};

b.prototype.method = function() {alert("b");};

c = new window[prompt("")];

alert(c.method());

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

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

1
2
3
4
5
6
7

var a = function() {};

a.prototype.p1 = 1;

var b = new a();

alert(b.p1); // 1

alert(b.p2); // undefined

a.prototype.p2 = 2;

alert(b.p2); // 2

编辑代码 重置 运行代码
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属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: