相关疑难解决方法(0)

Bluebird的util.toFastProperties函数如何使对象的属性"快速"?

在Bluebird的util.js文件中,它具有以下功能:

function toFastProperties(obj) {
    /*jshint -W027*/
    function f() {}
    f.prototype = obj;
    ASSERT("%HasFastProperties", true, obj);
    return f;
    eval(obj);
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,在返回函数之后有一个声明,我不知道它为什么存在.

同样,它似乎是故意的,因为作者已经沉默了JSHint对此的警告:

'return'后无法访问'eval'.(W027)

这个功能到底是做什么的?难道util.toFastProperties真的让一个对象的属性"快"?

我在Bluebird的GitHub存储库中搜索了源代码中的任何注释或者问题列表中的解释,但我找不到任何注释.

javascript performance v8 node.js bluebird

165
推荐指数
1
解决办法
1万
查看次数

为什么改变对象的[[prototype]]对性能有害?

标准 setPrototypeOf函数的MDN文档 以及非标准属性: __proto__

强烈建议不要改变对象的[[Prototype]],无论如何实现,因为它非常慢并且不可避免地减慢了现代JavaScript实现中后续执行的速度.

使用Function.prototype添加属性是添加成员函数JavaScript类的方式.然后如下所示:

function Foo(){}
function bar(){}

var foo = new Foo();

// This is bad: 
//foo.__proto__.bar = bar;

// But this is okay
Foo.prototype.bar = bar;

// Both cause this to be true: 
console.log(foo.__proto__.bar == bar); // true
Run Code Online (Sandbox Code Playgroud)

为什么foo.__proto__.bar = bar;不好?如果它的坏不是Foo.prototype.bar = bar;那么糟糕?

那么为什么会出现这样的警告:它非常缓慢并且不可避免地减慢了现代JavaScript实现中后续执行的速度.当然Foo.prototype.bar = bar;不是那么糟糕.

更新也许通过突变他们意味着重新分配.见接受的答案.

javascript performance prototype prototype-chain

54
推荐指数
1
解决办法
3万
查看次数

在javascript中将普通对象转换为函数实例("类")

function Person() {
      var self = this;

      self.personName="";
      self.animals=[];
}

function Animal(){
     var self=this;

     self.animalName="";
     self.run=function(meters){
         .....
     }
}
Run Code Online (Sandbox Code Playgroud)

服务器响应:

 [{personName:John,animals:[{animalName:cheetah},{animalName:giraffe}]} , {personName:Smith,animals:[{animalName:cat},{animalName:dog}]} ]
Run Code Online (Sandbox Code Playgroud)

我从服务器获取Person数组.我想将通用Person数组转换为类型Person数组.所以我可以使用

 persons[0].Animals[2].Run();
Run Code Online (Sandbox Code Playgroud)

我创建了Javascript

 Object.create(Person,person1);
Run Code Online (Sandbox Code Playgroud)

但我希望它的跨浏览器版本支持阵列

  ObjectArray.create(Person,persons);
Run Code Online (Sandbox Code Playgroud)

要么

 Object.create(Person[],persons);
Run Code Online (Sandbox Code Playgroud)

javascript casting

14
推荐指数
1
解决办法
2万
查看次数