JavaScript最佳实践原型
我在构造函数的原型中有一个函数:JavaScript最佳实践原型,javascript,object,prototype,Javascript,Object,Prototype,我在构造函数的原型中有一个函数: function Animal(name) { this.name = name } Animal.prototype.generateToys = function(numberOfToys) { if(numberOfToys == 1) { this.createToys(); } else { this.createToys(); } } 仍然需要声明createToys。这就是我的问题指向的地方。假设gener
function Animal(name) {
this.name = name
}
Animal.prototype.generateToys = function(numberOfToys) {
if(numberOfToys == 1) {
this.createToys();
}
else {
this.createToys();
}
}
仍然需要声明createToys
。这就是我的问题指向的地方。假设generateToys
将是调用createToys()
的唯一方法,那么最好在方法generateToys
内部创建createToys
如下:
function Animal(name) {
this.name = name
}
Animal.prototype.generateToys = function(numberOfToys) {
if(numberOfToys == 1) {
this.createToys();
}
else {
this.createToys();
}
function createToys() {
...
...
...
}
}
或者您会将其创建为如下所示的方法(原型):
Animal.prototype.createToys = function() {
...
...
...
}
什么更好?为什么?:) 如果将其放入
generateToys()
方法中,则每次调用该方法时都会重新声明它,然后在该方法完成时将其从范围中删除。大多数情况下,这不是您想要的,因此您更愿意将其作为单独的方法创建。这取决于您的体系结构
如果您计划有许多
Animal
的实例,那么将您的方法添加到原型中会更好,否则您将创建大量的私有函数,这将是非常昂贵的(从性能方面来说)
在原型上声明它意味着您的每个实例都可以直接调用它,并且您在内存中只有一个带有该声明的位置,因为原型本身是所有实例共享的单个引用 视情况而定。是否希望对象的任何实例都可以直接访问createToys?或者你想让他们经历几代人?既然你有一个if在generateToys中,我猜你希望它们总是通过generateToys,所以函数应该是私有的,最好的解决方案是有效的。您的第一个建议没有将
createToys
作为实例的属性,因此调用this.createToys()
将失败(即它不起作用)。但是,即使您解决了这个问题,为什么每次调用generateToys
时都必须重新创建createToys
?这似乎没有必要(至少以你的例子为例)。定义函数一次。你在哪里做(prototype
,函数在“类”之外)其实并不重要。我建议你看一看Douglas Crockford的演讲,function the Ultimate(),它揭示了创建对象的各种方法?
Animal.prototype.generateToys = function(numberOfToys) {
var createToys = function createToys() {
}
})