【发布时间】:2011-09-27 09:57:20
【问题描述】:
我一直在摆弄 Javascript 中的原型和闭包模式。您可能知道,使用闭包模式时有一个performance penalty,因为它为对象的每个实例重新定义了相同的函数。但是,闭包模式确实允许私有变量,这使得封装更容易。
这是原型模式的典型示例:
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,它确实显示了性能上的很大差异,但我不知道为什么。
【问题讨论】:
标签: javascript oop closures prototypal-inheritance