我想知道是否有可能将功能属性添加到所有本机对象原型(即此MDN页面上的所有内容)。
例如,我可以将此简单函数设置为Array.prototype
,它将正常工作:
Array.prototype.tap = function (fn) {
return fn(this);
};
[1, 2, 3, 4, 5].tap(console.log)
但是,如果我希望此函数在任何原型上执行怎么办?例如:
{ name: 'Jonathan', age: 19 }.tap(console.log); // { name: 'Jonathan', age: 19 }
new Map([['1 + 1', 2], ['2 + 2', 4]]).tap(console.log); // Map(2) {"1 + 1" => 2, "2 + 2" => 4}
'Hello World'.tap(console.log); // Hello World
true.tap(console.log); // true
new Date().tap(console.log); // Tue Oct 06 2020 21:09:33 GMT-0400 (Eastern Daylight Time)
我可以给函数分配某种“全局原型”吗?还是我必须手动将其设置为每个本机原型?
您可以穿上它Object.prototype
:
Object.prototype.tap = function (fn) {
return fn(this);
};
[1, 2, 3, 4, 5].tap(console.log)
new Date().tap(console.log);
这将允许几乎所有对象访问该方法。唯一的例外是不继承自的对象Object.prototype
(这种情况很少见,必须有意识地做到):
Object.prototype.tap = function (fn) {
return fn(this);
};
const obj = Object.create(null);
obj.tap(console.log);
但这只是出于好奇的缘故。请不要在真实代码中使用此代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句