例如,我们说我真的很饿,所以我一直在做煎饼!
var Buttermilk = new Pancake("Buttermilk", "Delicious");
var ChocolateChip = new Pancake("Chocolate Chip", "Amazing");
var BlueBerry = new Pancake("Blue Berry", "The Best");
var SnozBerry = new Pancake("Snoz Berry", "What's a Snoz Berry?");
我如何计算我刚制作的煎饼数量而不用手动制作?是否有代码表示"有很多变量属于Pancake品种"?
编辑:
谢谢你的答案!我特意寻找一种简单的方法来快速计算用少量代码创建对象的次数。这就是我得到的,谢谢!
答案 0 :(得分:3)
您可以在javascript类中拥有静态属性。你可以用封闭方式将它们隐藏起来:
var Pancake = (function() {
var instances = 0;
return function(a, b) {
this.a = a;
this.b = b;
instances++;
Pancake.prototype.instances = function() { // equivalent of a static method
return instances;
}
};
}());
或将它们放在对象原型中:
var pancake = function(a, b) {
this.a = a;
this.b = b;
pancake.prototype.count = pancake.prototype.count ? pancake.prototype.count + 1 : 1; // equivalent of a static property
}
你也可以通过实现某种“继承”来“覆盖”构造函数,例如在这个小提琴中:
var Pancake = function(a, b) {
this.a = a;
this.b = b;
};
var before = Pancake.prototype;
var Pancake = function() {
console.log("overriden");
Pancake.prototype.instances = Pancake.prototype.instances ? Pancake.prototype.instances + 1 : 1; // here you should restore the whole prototype
return before.constructor.apply(this, arguments);
};
var a = new Pancake("a", "b");
document.write(Pancake.prototype.instances + "<br />");
var b = new Pancake("c", "d");
document.write(Pancake.prototype.instances + "<br />");
document.write(JSON.stringify(a) + "<br />");
document.write(JSON.stringify(b) + "<br />");
答案 1 :(得分:2)
你可以保留一个在构造函数中会增加的计数器,这是一个很好的解决方案
答案 2 :(得分:1)
在Pancake函数中使用计数器变量..:)
var count = 0;
function Pancake(){
// Cook pancakes
count += 1;
}
console.log('Total pancakes' + count);
答案 3 :(得分:0)
我意识到你已经接受了答案,但这花了我一段时间!从你的问题我想你可能不想改变Pancake课程。所以这是试图避免这种情况。
此函数将搜索您指定的对象中的所有对象,并计算您的类型的所有实例。
<ion-card-header class="cardHead" text-center>
<h2 class="cardHeaderText">{{obj.products.title}}</h2>
<p>Prix: {{obj.price_html}}</p>
</ion-card-header>
<ion-card-content>
<img src="{{obj.images.src}}">
<p class="cardBodyText">{{obj.description}}</p>
<p>Tags: {{obj.tags}}</p>
<p>Catégories: {{obj.categories}}</p>
</ion-card-content>
我确信有些情况会失败,所以反馈意见得到赞赏!
答案 4 :(得分:0)
如果要计算从原型创建的实例数,则需要以下属性:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class)
class Test {
@Autowired
ClassA obj1; // how to initialise it with instance1
@Autowired
ClassA obj2; //// how to initialise it with instance2
}
现在,在构造函数本身中使用:
Asset.prototype.index = 0;
答案 5 :(得分:0)
更面向对象的方法是使用静态方法和静态属性。 虽然 JS 没有静态属性,但我们可以在构造函数本身上设置它 例如
class Pancake {
static count() {
Pancake.counter = (Pancake.counter || 0) + 1;
return;
}
constructor(objName) {
Pancake.count();
this.name = objName;
}
}
new Pancake("A");
console.log(Pancake.counter); //1
new Pancake("B");
console.log(Pancake.counter); //2
new Pancake("C");
console.log(Pancake.counter); //3
new Pancake("D");
console.log(Pancake.counter); //4
new Pancake("E");
console.log(Pancake.counter); //5