利用ECMAScript 5 Object.getPrototypeOf实现对象方法重发机制
作者:异步漫步时间:2026-10-25 08:31:21浏览:446
本文介绍如何利用ECMAScript 5新增的Object.getPrototypeOf方法,绕过类型信息直接获取对象原型,从而构建一个名为resend的方法。该机制允许在对象内部重新调用原型链上的方法,实现了类似事件重发或方法重调的功能,适用于需要动态调整方法调用链的场景。
利用Object.getPrototypeOf构建resend机制
ECMAScript 5规范定义了一个备受期待的方法:Object.getPrototypeOf。该方法能够忽略类型信息,直接获取指定对象的[[prototype]](原型)。基于这一特性,我们可以构建出一个名为resend的功能:(请使用Chrome 5或IE9预览第三版浏览器进行测试验证)
resend方法代码实现
具体实现代码如下:
obj.resend = function() {
var pof = Object.getPrototypeOf;
var has = function() {......} // 封装hasOwnProperty方法
var make = function(obj, old) {
return function(name, args) {
var step = pof(obj),
r;
while (step && !has(step, name)) step = pof(step);
if (!step) throw new Error('Unable to resend: method missing');
var foundMethod = step[name];
var backup = arguments.callee;
this.resend = make(this, backup);
r = foundMethod.apply(this, Array.prototype.slice.call(arguments, 1));
this.resend = old;
return r
}
};
return function(name, args__) {
var rv;
var old = this.resend;
this.resend = make(this, old);
rv = this.resend.apply(this, arguments);
this.resend = original;
return rv;
}
}()作者最新文章
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
