влияет ли глубина цепочки прототипов на объект на производительность? - PullRequest
2 голосов
/ 22 ноября 2011

Несколько дней назад я разместил здесь вопрос о наследовании классов

Тогда кто-то предоставит ссылку - умный сценарий для наследования классов от Джона Резига.

Затем я пытаюсь использовать этот скрипт.

Но я обнаружил, что объект, созданный этим сценарием, будет иметь очень глубокую цепочку прототипов.

Я использую пример в блоге:

var Person = Class.extend({
  init: function(isDancing){
    this.dancing = isDancing;
  },
  dance: function(){
    return this.dancing;
  }
});

var Ninja = Person.extend({
  init: function(){
    this._super( false );
  },
  dance: function(){
    // Call the inherited version of dance()
    return this._super();
  },
  swingSword: function(){
    return true;
  }
});

var n=new Ninja(true);
console.dir(n);

С помощью firebug я нашел это: enter image description here

Так мне интересно, влияет ли глубина цепочки прототипов на объект на производительность?

Кажется, есть бесконечный цикл.

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

Прототип конструктора - это тот же конструктор.Так что да, вы смотрите на бесконечный цикл.

Однако браузеры не следуют цепочке конструктора при разрешении членов объекта, у них есть внутренний указатель (иногда называемый __PROTO__, но не рассчитывающий на него), который фактически используется.Движок JavaScript также может предпочесть компилировать в машинный код, который заранее разрешает возможные элементы, поэтому никакой цепочки не существует во время фактического выполнения.

Я сильно сомневаюсь, что вы вообще испытаете какое-либо замедление.

0 голосов
/ 22 ноября 2011

Это влияет на производительность, потому что для получения значения свойства необходимо следовать цепочке прототипов.

Может ли это стать узким местом вашего приложения?Я очень сомневаюсь в этом.

...