在所有全局对象原型上设置一个方法
Set a method on all global object prototypes
我想知道是否可以将函数 属性 添加到所有本机对象原型(即 this MDN page 上的所有内容)。
例如,我可以将这个简单的函数设置为 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);
但这只是出于好奇。请不要在实际代码中使用它。
我想知道是否可以将函数 属性 添加到所有本机对象原型(即 this MDN page 上的所有内容)。
例如,我可以将这个简单的函数设置为 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);
但这只是出于好奇。请不要在实际代码中使用它。