js中的晚绑定和极晚绑定
2014-01-03 16:05
239 查看
js中的晚绑定和大多数语言(比如c++)中的晚绑定概念一样,简单的说,就是动态地引用不同的实例的同名方法(或属性),例如代码:
当运行时,用户在输入框里输入a,那么最后提示的就是a,而输入b,提示的就是b,这就是晚绑定。
而js中,还有一种叫做“极晚绑定” ,很少语言有支持极晚绑定。而js得prototype链机制,导致了js支持极晚绑定。示例代码如下:
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属性。
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()); |
编辑代码 重置 运行代码 |
而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.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属性。
相关文章推荐
- js_event.keycode值大全
- js 实现5秒倒计时后跳转页面
- javascript 表格内容排序 简单操作示例代码
- 解决JS中乘法的浮点错误的方法
- 如何判断Javascript对象是否存在
- 如何判断Javascript对象是否存在
- javascript实现回车提交表单
- js动态添加表格行
- 解析Json——操纵JsonArray
- popus.js弹出模式页面使用方法整理总结
- json 字符串的问题
- 获取js事件对象
- js传中文参数controller里获取参数乱码问题解决方法
- javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")
- JS实现倒是54321并且跳转页面的代码
- 引用 DWRUtil.js
- javascript 高级——基于原型链的继承
- Chrome developer tool介绍(javascript调试)
- javascript判断是否数字、整数
- 图片路径中含有中文在jsp下不能正常显示