如您所知,__proto__
为deprecated。
MDN: 警告:不推荐使用
__proto__
属性,不应使用该属性。
__proto__
的快速和跨浏览器替代方案是什么?
在我的情况下,我更改了函数的__proto__
。所以我找不到任何替代方案。
已弃用的代码
// one time
var proto = {};
proto.bar = function (x) { return this(x) + 10; };
proto.buzz = function () { return this(4); };
// and 100 more function proto.*
proto = _.extend(proto, (function(){}).__proto__); // underscore extend function
// update: change arguments order
// many time
var foo = function (x) { return 2 * x; }
foo.__proto__ = proto;
慢替代(jsperf)
// many time
var foo = function (x) { return 2 * x; };
foo.bar = function (x) { return this(x) + 10; };
foo.buzz = function () { return this(4); };
// and 100 more function foo.*
是否有快速和跨浏览器替代方案?
答案 0 :(得分:2)
正如链接的MDN文章所述,Object.getPrototypeOf()
是新功能。它似乎有很好的浏览器支持。对于那些不支持它的人(IE除外),你可以用__proto__
来填充它。 ;)
if (!Object.getProtoTypeOf) {
Object.getProtoTypeOf = function(obj) {
return obj.__proto__;
};
}
答案 1 :(得分:2)
首次使用时,您获得了某个功能的__proto__
,因此您只需使用Function.prototype
proto = _.extend(Function.prototype, proto); // underscore extend function
你的第二个用途是替换一个物体上的原型,所以别无选择。
ECMAScript 6正在标准化__proto__
,并且还会Object.setPrototypeOf()
,因此您可以在实施后使用它们。