JavaScript:循环使用原型函数的变量

时间:2014-04-28 15:59:49

标签: 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("Hello world!");
var Handle2 = new MyFunction("Test");

LoopThroughNames();

很抱歉没有代码标签,我就在手机上。

3 个答案:

答案 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"

http://jsbin.com/yogahuze/2/edit?js,console

答案 1 :(得分:0)

问题在于LoopThroughNames()实施。您无法迭代MyFunction,因为它是一个函数声明,但您可以迭代您创建的Handle1Handle2个对象。

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

它会起作用