我正在尝试做这样的事情:
var MyFunction = function(Name) {
var Handle = this;
Handle.Name = Name;
}
var LoopThroughNames = function() {
for(Name in MyFunction) { // This doesn't work.
console.log(Name);
}
}
var Handle1 = new MyFunction("Hello world!");
var Handle2 = new MyFunction("Test");
LoopThroughNames();
很抱歉没有代码标签,我就在手机上。
答案 0 :(得分:4)
你将Class与实例混淆:
Name属性将添加到使用new创建的实例中
函数MyFunction本身不受这些更改的影响,因此,是的,MyFunction没有自己的属性。
编辑:关注@JuanMendes的想法,如果你想保留所有的话 创建实例,您可以将它们存储在一个数组中,为什么不存储 此数组作为MyFunction属性 经过一些名称更改后,我建议:
function MyClass(name) {
this.name = name;
MyClass.instances.push(this);
}
MyClass.instances = [];
function printInstancesProperty( targetClass, propName) {
for(var i=0; i< targetClass.instances.length; i++) { // This work.
var instance = targetClass.instances[i];
console.log(instance[propName]);
}
}
var Handle1 = new MyClass("Hello world!");
var Handle2 = new MyClass("Test");
printInstancesProperty(MyClass, 'name');
结果是,预期:
"Hello world!"
"Test"
答案 1 :(得分:0)
问题在于LoopThroughNames()
实施。您无法迭代MyFunction
,因为它是一个函数声明,但您可以迭代您创建的Handle1
和Handle2
个对象。
var LoopThroughNames = function(instanceObject) {
for(Name in instanceObject) {
console.log(instanceObject[Name]);
}
}
LoopThroughNames(Handle1); // "Hello world!"
LoopThroughNames(Handle2); // "Test"
答案 2 :(得分:-2)
var myFunction = function(name) {
var handle = this;
handle.name = name;
}
var loopThroughNames = function() {
for (name in myFunction) {
console.log(name);
}
}
var handle1 = new myFunction("Hello world!");
var handle2 = new myFunction("Test");
loopThroughNames();
它会起作用