JavaScript:通过原型函数循环';s变量

JavaScript:通过原型函数循环';s变量,javascript,Javascript,我正在尝试这样做: 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("H

我正在尝试这样做:

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();
对不起,没有代码标签,我在手机上

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();

它将工作

问题在于您的
LoopThroughNames()
实现。您不能迭代
MyFunction
,因为它是一个函数声明,但是您可以迭代您创建的
Handle1
Handle2
对象

var LoopThroughNames = function(instanceObject) {
    for(Name in instanceObject) {
        console.log(instanceObject[Name]);
    }
}

LoopThroughNames(Handle1); // "Hello world!"
LoopThroughNames(Handle2); // "Test"

您将类与实例混淆:
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');

这是正确的,从另一角度来看,OP可以通过执行< C++ > MyFalue.Stasy.Press(this),将代码初始化为跟踪所有实例,假设Stase初始化为一个数组,也可以使用“代码>名称< /COD>映射的键。对于记录,我知道它们是类,与C++和PHP相同,但不同类型的类,所以我把“原型函数”,因为这也是有效的:MyFunction.prototype.Name=Name;谨防原型继承与C++继承有很大的不同。“原型功能”没有实际意义。所有对象都有原型,函数都是对象,所以它们也有原型。我想你的意思是“constructor function”,它是最接近类的js对象(=用于new的函数)。由于您只在实例上定义了名称,而没有在构造函数原型上定义名称,因此没有MyFunction.prototype.Name=Name;(!即使所有实例都设置了属性!)您缺少很多OO概念。。类声明x类实例化,循环属性x数组,构造函数…我认为O.P.的真正意图是循环一个类的实例。游戏炼金术士是一个非常有用的人,我非常感谢他。欢迎来到堆栈溢出!你能解释一下你发布的代码中有什么是对这里发生的问题的答案,以便用户和未来的读者可以从中学习吗?除了你将第一个字母小写外,我看不到任何不同。谢谢,但这不是我想要的。=]再次感谢,4票领先的人回答了我。
"Hello world!"
"Test"