Javascript прототип вопрос - PullRequest
       6

Javascript прототип вопрос

2 голосов
/ 28 февраля 2011

Когда я читал о прототипе в javascript, у меня возник вопрос.

Допустим, у меня есть следующие функции и объекты

Function #1:
function Rectangle(w,h){
    this.width = w;
    this.height = h;
    this.area = function(){return this.width * this.height}
}

var object1 = new Rectangle(10,5);
var object11 = new Rectangle(5,5);


Function #2:
function Rectangle(w,h){
    this.width = w;
    this.height = h;
}

Rectangle.prototype.area = function(){ return this.width * this.height; }

var object2 = new Rectangle(10,5);
var object22 = new Rectangle(5,5);

Насколько я понимаю, использование object2 и object22меньше памяти, чем object1 и object11, потому что функция # 2 использует прототип.

это правильно?

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

Да, это теоретически правильно, потому что функция 1 создает уникальный function для area каждый раз, когда он вызывается, тогда как все объекты, созданные с помощью функции 2, ссылаются на общую функцию.

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

В Интернете очень мало документации о конкретных оптимизациях, выполняемых каждым браузером, но вот пара ссылок, которые кажутсяуказать на некоторую форму оптимизации закрытия:

1 голос
/ 28 февраля 2011

Это «правильно» для классического представления Javascript. Я думаю, что современные компиляторы javascript могут уменьшить бесполезность первого подхода, но если вы создаете много небольших объектов, которые могут совместно использовать функцию в прототипе, я все же считаю, что это хороший стиль.

...