时间一般不超过原型的功能,我见过的类定义之外声明原型的功能,如:设置JavaScript对象类声明
function Container(param) {
this.member = param;
}
Container.prototype.stamp = function (string) {
return this.member + string;
}
var container1 = new Container('A');
alert(container1.member);
alert(container1.stamp('X'));
此代码将产生两个警报与价值观“A”和“AX” 。
我想定义类定义的原型函数INSIDE。做这样的事情有什么不妥吗?
function Container(param) {
this.member = param;
if (!Container.prototype.stamp) {
Container.prototype.stamp = function() {
return this.member + string;
}
}
}
我试图让我可以访问类中的私有变量。但我发现,如果我的原型函数引用私人变种,私营var值始终是当函数原型最初创建,而不是在对象实例的值被使用的值:
Container = function(param) {
this.member = param;
var privateVar = param;
if (!Container.prototype.stamp) {
Container.prototype.stamp = function(string) {
return privateVar + this.member + string;
}
}
}
var container1 = new Container('A');
var container2 = new Container('B');
alert(container1.stamp('X'));
alert(container2.stamp('X'));
此代码会生成两个值为“AAX”和“ABX”的警报。我希望输出将是“AAX”和“BBX”。我很好奇为什么这不起作用,如果有其他的模式我可以使用。
编辑:请注意,我完全理解,对于这个简单的例子,最好只使用像this.stamp = function() {}
这样的闭包,而不要使用原型。我就是这么做的。但我使用的原型,以了解更多关于它的实验和想知道的几件事情:
- 当它是有意义的使用原型的功能,而不是关闭?我只需要使用它们来扩展现有的对象,如
Date
。我读过closures are faster。 - 如果我需要使用原型函数出于某种原因,是否可以在类的内部定义它,比如在我的示例中,还是应该在外部定义?
- 我想了解为什么每个实例的privateVar值不能被原型函数访问,只有第一个实例的值。
瓶盖再删除线... – Dormilich 2010-05-06 22:09:14
阅读上封(http://www.jibbering.com/faq/faq_notes/closures.html)的详细原因,你的代码的行为它的方式。 – outis 2010-05-06 22:09:28