js中的晚绑定和极晚绑定

本文介绍了JavaScript中的晚绑定和极晚绑定概念,并通过示例代码解释了这两种绑定方式的工作原理,展示了JavaScript prototype链机制如何支持极晚绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值