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毫秒的性能差异:)

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...