Я немного возился с прототипом и шаблоном замыкания в Javascript.Как вы, возможно, знаете, при использовании шаблона замыкания снижается производительность , поскольку он переопределяет одни и те же функции для каждого экземпляра объекта.Однако шаблон замыкания допускает закрытые переменные, что облегчает инкапсуляцию.
Вот типичный пример шаблона прототипа:
function Foo(val) {
this.val = val;
}
Foo.prototype.getVal = function() {
return this.val;
}
var f = new Foo(42);
Я подумал, почему вы не можете сделать эточто-то вроде этого?
function Parent() {
}
Parent.prototype.getVal = function() {
return this.val;
}
function foo(val) {
function Obj {
this.val = val;
}
Obj.prototype = new Parent();
return new Obj();
}
var f = foo(42); // Note the missing 'new'
Это позволяет использовать частные переменные в функции foo (), и вы даже можете динамически устанавливать прототип в функции foo ().
Я сделал jsperf.com test , который показывает, показывает большую разницу в производительности, но я не знаю почему.