Javascript 我怎样才能找到“中的方法?”;家长;?

Javascript 我怎样才能找到“中的方法?”;家长;?,javascript,jquery,html,Javascript,Jquery,Html,我有这个东西。 fieldsCreator的成员持有每个字段的创建者方法。 我的问题是如何在fieldsCreators中调用creator方法,如下所述: var obj={ creator:function(ch) { .... .... .... }, fieldsCreators:{ INVITER: function () { return creator('

我有这个东西。
fieldsCreator的成员持有每个字段的创建者方法。
我的问题是如何在
fieldsCreators
中调用creator方法,如下所述:

var obj={
    creator:function(ch) {
        ....
        ....
        ....
    },
    fieldsCreators:{
            INVITER: function () {
                return creator('a'); //HOW DO I CALL creator METHOD?
            },
            CUSTOMER: function () {
                return creator('b'); //HOW DO I CALL creator METHOD?
            }
    }
}
obj.creator(…)
不工作吗

您正在定义一个名为“obj”的实例,因此应该能够使用该名称

编辑-- 这可能是你想要的-

var obj={
    creator:function(ch) {
        ....
        ....
        ....
    },
    self : this,
    fieldsCreators:{
            INVITER: function () {
                return self.creator('a'); //HOW DO I CALL creator METHOD?
            },
            CUSTOMER: function () {
                return self.creator('b'); //HOW DO I CALL creator METHOD?
            }
    }
}

您还可以使用如下模式:

var obj = (function() {

    var methods = {
        creator: function(ch) {

        },
        fieldsCreators:{
            INVITER: function () {
                return methods.creator('a');
            },
            CUSTOMER: function () {
                return methods.creator('b');
            }
        }
    };

    return methods;
})();
这有什么用?假设您想让您的所有方法访问一个变量,但只在obj内部可见。如果obj只是一个对象,那么您就不能这样做,它需要一个函数的作用域。例如:

var obj = (function() {

    // everything declared with var won't be visible to the rest
    // of the application, which is good encapsulation practice.
    // You only return what you want to be publicly exposed.
    var MYPRIVATEINFO = "cheese";

    var methods = {
        creator: function(ch) {
            // you have access to MYPRIVATEINFO here
            // but the rest of the application doesn't
            // even know about it.    
        },
        fieldsCreators:{
            INVITER: function () {
                return methods.creator('a');
            },
            CUSTOMER: function () {
                return methods.creator('b');
            }
        }
    };

    return methods;
})();
如果你不想命名你的对象,你可以这样构造它,这就是为什么拥有一个私有环境是关键:

var obj = (function() {

    var creator = function(ch) {

    };


    return {
        // if you wish, you can still expose the creator method to the public:
        creator: creator,
        fieldsCreators: {
            INVITER: function () {
                return creator('a');
            },
            CUSTOMER: function () {
                return creator('b');
            }
        }
    };
})();

在没有obj的情况下,是否有可能获得creator方法?我不想依赖变量名中的fieldsCreators,但是你有一个singleton,不使用obj是没有意义的。但我想我知道你的意思。看看我的编辑很快。但再次,除非它不需要是单例,否则我建议使用obj。如果这不是单例,为什么使用obj更好?你有的是单例。意味着它只有一个实例。这意味着obj将永远存在。如果你决定不再单身。例如使用函数obj(){},其中有人会执行var t=obj();那么你就需要使用parent或者别的什么。但正如您在上面看到的,您只有一个实例。为什么您的示例比Amir Raminfar的解决方案更好?它允许您拥有一个私有环境。我会更新这篇文章,告诉你如何做到这一点。除了Eli说你可以选择哪些方法是私有的,哪些方法是公有的之外,其实是一样的。但再次使用“方法”就像使用“obj”