And*_*rov 15 javascript functional-programming
我正在寻找一个可调用的JavaScript对象,具有任意原型链,但不修改Function.prototype.
换句话说,这必须工作:
var o = { x: 5 };
var foo = bar(o);
assert(foo() === "Hello World!");
delete foo.x;
assert(foo.x === 5);
Run Code Online (Sandbox Code Playgroud)
没有做任何全球变化.
oll*_*iej 12
没有什么可以阻止你向函数添加任意属性,例如.
function bar(o) {
var f = function() { return "Hello World!"; }
o.__proto__ = f.__proto__;
f.__proto__ = o;
return f;
}
var o = { x: 5 };
var foo = bar(o);
assert(foo() === "Hello World!");
delete foo.x;
assert(foo.x === 5);
Run Code Online (Sandbox Code Playgroud)
我相信应该做你想做的事.
这可以通过将对象o
注入原型链来实现,但有几点需要注意:
__proto__
,甚至有一个等效的,一些评论,这看起来只适用于基于firefox和safari的浏览器(因此camino,chrome等工作).o.__proto__ = f.__proto__;
只是函数原型函数(如function.toString)才真正需要,所以你可能只想跳过它,特别是如果你希望o
有一个有意义的原型.