javascript – 实例的工作原理是什么,相对而言,是否缓慢?

前端之家收集整理的这篇文章主要介绍了javascript – 实例的工作原理是什么,相对而言,是否缓慢?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个关于instanceof的问题:

如果我做了约翰的例子,人类就会将原型链1的实例化,并以这种方式工作:

var temp = john.constructor;
while (true) {
    if (temp === Human) {
        return true;
    }
    temp = temp.prototype.constructor
}
return false;

如果是这样,说实例相对较慢,相比之下,简单地在每个对象的属性中存储一个唯一的接口id号. (我的意思是我们可以省略讨论这将是麻烦的,因为我确定有一些方法来创建一个自动化工具).

解决方法

在V8(Chrome的JS引擎)中,似乎几乎没有任何表现:
> function A(){}
> function B(){}
> function C(){}
> function D(){}
> B.prototype = new A();
> C.prototype = new B();
> D.prototype = new C();
> 
> var objA = new A();
> var objD = new D();
> 
> var start = (+new Date()); for(var i=0; i<10000000; i++){ objA instanceof A } console.log((+new Date()) - start);
138
> var start = (+new Date()); for(var i=0; i<10000000; i++){ objD instanceof A } console.log((+new Date()) - start);
138

Firefox显示相同的行为.

在这里有点疯狂,但是:

> var classes = [];
> for(var i=0; i<10000; i++){
>   classes[i] = function(){};
>   i && (classes[i].prototype = new (classes[i-1])());
> }
>
> var obj0 = new classes[0],>  obj9999 = new classes[9999];
>
> var start = (+new Date()); for(var i=0; i<10000000; i++){ obj0   instanceof classes[0] } console.log((+new Date()) - start);
138
> var start = (+new Date()); for(var i=0; i<10000000; i++){ obj999 instanceof classes[0] } console.log((+new Date()) - start);
138

我觉得可以放心的假设没有任何性能打击,如果它可以通过10,000课程,而不是看到1毫秒的性能差异:)

原文链接:https://www.f2er.com/js/154613.html

猜你在找的JavaScript相关文章