我知道对象和数组的类型。我知道如何使用以及如何创建对象和数组,但我不知道JavaScript中#include <iostream>
#include <type_traits>
template<class T>
constexpr size_t len(T &a)
{
return sizeof(a) / sizeof(typename std::remove_all_extents<T>::type);
}
int main()
{
int a[5][4][3]{{{1,2,3}, {4,5,6}}, { }, {{7,8,9}}};
constexpr auto ttt = len(a);
int i;
std::cout << ttt << ' ' << len(i) << '\n';
return 0;
}
的类型以及如何创建child
的类型?
这是一个镀铬控制台截图。
答案 0 :(得分:1)
它似乎是名为String equationAdd = et_roll1.getText().toString();
String equationSubtract = et_roll1.getText().toString();
String[]rollsAdd = equationAdd.split("\\+");
String[]rollsSubtract = equationSubtract.split("-");
for (String dieTypeAdd:rollsAdd)
{
for (String dieTypeSubtract:rollsSubtract){
String[] dieDataAdd = dieTypeAdd.split("d");
String[] dieDataSubtract = dieTypeSubtract.split("d");
if (dieDataAdd.length > 1)
{
int dieQty = Integer.parseInt(dieDataAdd[0]);
int dieFace = Integer.parseInt(dieDataAdd[1]);
for (int i = 0; i < dieQty; i++)
{
int roll = r.nextInt(dieFace);
sumAdd += roll;
}
}
else
{
int modifier = Integer.parseInt(dieDataAdd[0]);
sumAdd += modifier;
}
if (dieDataSubtract.length > 1)
{
int dieQty = Integer.parseInt(dieDataSubtract[0]);
int dieFace = Integer.parseInt(dieDataSubtract[0]);
for (int i = 0; i < dieQty; i++)
{
int roll = r.nextInt(dieFace);
sumSubtract -= roll;
}
}
else
{
int modifier = Integer.parseInt(dieDataSubtract[0]);
sumSubtract -= modifier;
}
}}
的自定义类的实例。
如果您在Chrome控制台中运行以下代码:
child
您会看到相同的输出,减去function child() {}
new child();
的所有属性:
对于它的工作原理,通常命名约定是将child
之类的构造函数的名称大写,但它在技术上并不是必需的。
答案 1 :(得分:1)
我同意mu is too short这很可能是Backbone.Model
的一个实例,无论是直接还是间接(通过子类)。
您看到child
的原因归功于Backbone的内部机制。当您使用Backbone.Model.extend
时,backbone会为新类设置构造函数,此构造函数的名称为child
。这在code for the .extend
method中很容易看到。
从runtimme获得的某些有用的标识符很难,如果不是完全不可能的话。我已经养成了使用__classname__
作为一个字段的习惯,我在该字段中输入了该类的名称。然后可以在我正在检查的对象的__proto__
字段上看到它。我只将其用于调试目的。以下是Chrome控制台的示例:
答案 2 :(得分:1)
由于@mu在查看对象属性方面太短correctly guessed,因此它是Backbone.Model
的一个实例。你可以像这样创建同一个对象(类)的另一个实例,只要你知道正确的构造函数参数:
new child.constructor(...);
您也可以在新集合中使用模型(类),尽管您只能访问模型实例:
new MyCollection = Backbone.Collection.extend({
model: child.constructor,
...
});
作为@Louis noted,除非您自己为对象原型添加一些名称,否则无法从对象实例中获取合理的(类)名称。我经常在模型中需要一些初始化代码,而不是将它放到initialize
方法中,我声明命名构造函数显式并将初始化代码放在那里。就像这里名为MyModel
的函数一样:
var MyModel = Backbone.Model.extend({
constructor: function MyModel(attributes, options) {
Backbone.Model.prototype.constructor.call(this, attributes, options);
...
}
});
您可以在Chrome开发者工具中看到对象(类)名称,如下所示:
var Car = Backbone.Model.extend({
constructor: function Car(attributes, options) {
Backbone.Model.prototype.constructor.call(this, attributes, options);
}
});
var Truck = Car.extend({
constructor: function Truck(attributes, options) {
Car.prototype.constructor.call(this, attributes, options);
}
});
像__classname___
这样的字符串属性也可以在缩小的代码中保持不变。命名构造函数仅在非缩小代码中可用。如果在缩小代码后仍需要查看有意义的构造函数名称,则必须exclude them from mangling。