Преимущества прототипа JavaScript

Мне было интересно узнать о прототипной природе JavaScript и его преимуществах, и я составил следующий список:

1) Наследование

cat.prototype = animal

2) Эффективность памяти

a.prototype.b = function() {}

var a1 = new a();
var a2 = new a();

Тогда a1.b и a2.b - это, по сути, один и тот же объект, где:

var a = function() {
             this.b = function() {}; 
        }

var a1 = new a();
var a2 = new a();

a1.b и a2.b будут разными функциональными объектами и будут занимать больше памяти.

3) Добавление методов / полей к нескольким, уже созданным объектам "в дикой природе".

var a = function() {}

var a1 = new a();
var a2 = new a();

a.prototype.b = function() {}

a1.b();
a2.b();

Итак, вопрос в том, верны ли они?

... и есть ли еще какие-то преимущества, которые я упустил?

Ваше здоровье!


person lucas1000001    schedule 11.08.2010    source источник
comment
аргументировано. это в основном версия Javascript для свойств / методов класса и экземпляра   -  person Jason S    schedule 12.08.2010


Ответы (2)


Все это правильно.

Конечно, есть и «минусы»:

Никаких закрытий

function a() {
    var ival = 0;
    this.start = function(){ ival = setInterval(function(){ }, 300); }
    this.finish = function(){ clearTimeout(ival); }
}

по сравнению с:

function a() {
    this.ival = 0;
}
a.prototype.start = function(){ this.ival = setInterval(function(){ }, 300); }
a.prototype.finish = function(){ clearTimeout(this.ival); }
person palswim    schedule 11.08.2010

http://en.wikipedia.org/wiki/Prototype-based_programming#Comparison_with_class-based_models

Также см. Обсуждение наследования прототипов в ответах на этот вопрос:

наследование на основе прототипов и классов

person DVK    schedule 11.08.2010