Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript __原型已弃用。什么是快速和跨浏览器的替代方案?_Javascript_Performance_Prototype Programming - Fatal编程技术网

Javascript __原型已弃用。什么是快速和跨浏览器的替代方案?

Javascript __原型已弃用。什么是快速和跨浏览器的替代方案?,javascript,performance,prototype-programming,Javascript,Performance,Prototype Programming,正如您所知,\uuuuuuuuuuuuuuuuuuuuuuuuuu是 MDN: 警告:\uuu proto\uu属性已弃用,不应使用 什么是\uuuu proto\uuuu的快速跨浏览器替代方案? 在我的例子中,我更改了函数的\uuuuuuuuuuuuuuuuu。所以我找不到其他选择 不推荐使用的代码 // one time var proto = {}; proto.bar = function (x) { return this(x) + 10; }; proto.buzz = functi

正如您所知,
\uuuuuuuuuuuuuuuuuuuuuuuuuu

MDN: 警告:
\uuu proto\uu
属性已弃用,不应使用

什么是
\uuuu proto\uuuu
的快速跨浏览器替代方案? 在我的例子中,我更改了函数的
\uuuuuuuuuuuuuuuuu
。所以我找不到其他选择

不推荐使用的代码

// 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;
慢备选方案()


有没有快速和跨浏览器的替代方案?

正如链接的MDN文章所说,这是新功能。它似乎有很好的浏览器支持。对于那些不支持它的(IE除外),您可以使用
\uuuuu proto\uuuuu
对其进行填充)


在第一次使用时,您将获得函数的
\uuuu proto\uuuu
,因此您可以简单地使用
函数。prototype

proto = _.extend(Function.prototype, proto); // underscore extend function
第二个用途是替换对象上的原型,因此别无选择


ECMAScript 6正在标准化
\uuuu proto\uuuu
,并且还将有
对象。setPrototypeOf()
,因此您可以在实现后使用它们。

为什么不简单地
对象。创建
?“ECMAScript 6正在标准化
\uu proto\uu
”源代码?它不在规范中。@FelixKling:当前的草稿中有它。请提供一个链接。@FelixKling这是它吗,在B.2.2.1中?那么关于
foo.\uuuu proto\uuuu=proto
Object.setPrototypeOf()
Safari:不受支持,Internet Explorer:11,Firefox:31,Chrome 34在您的jsPerf中,测试严重偏向于
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
版本,因为您正在重用该版本中的函数,而不是第二版本中的函数……jsPerf结果的另一个原因,实际上,您正在修改
Function.prototype
,将方法直接添加到它,因此您的
foo.\uuuuuu proto\uuuu=proto
实际上是在做
foo.\uuuuu proto\uuuu=Function.prototype
,这不会改变任何东西。这是一个不可操作的Txn。我改变了扩展参数的顺序。那么,如果你用这个改变重新做测试,并且让“慢”版本重用现有的函数,会发生什么呢<代码>foo.bar=proto.bar;foo.buzz=proto.buzz;//等等。
foo.\uuuu proto\uuuu
具有最佳性能,
foo.bar=proto.bar
优于
foo.bar=function(){…}
if (!Object.getProtoTypeOf) {
    Object.getProtoTypeOf = function(obj) {
        return obj.__proto__;
    };
}
proto = _.extend(Function.prototype, proto); // underscore extend function