微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/js/154613.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐