首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中获取对象实例的名称

在JavaScript中获取对象实例的名称
EN

Stack Overflow用户
提问于 2013-08-09 10:24:21
回答 3查看 153关注 0票数 3

我有一个类似于下面的代码,并希望检测我的exScript的实例名。

在这种情况下,它将是exScript123

代码语言:javascript
复制
eecore = {
    something: 1,
    // ...
    someelse: function() { /* whatever */ };
};

var exScript = (function (undefined) {
    function exScript(inputOptions) {
        this.version = "0.0";
    }
    exScript.prototype.init = function () {
        // some code here
    };
    return exScript;
})();

eecore.exScript123 = new exScript();
eecore.exScript123.init();

过去一个小时,我一直在用arguments.calle.namethis.parent.name进行实验,但在我的情况下,它们似乎不起作用。我一直搞不清楚。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-09 10:35:00

稍微修改过的this code版本

代码语言:javascript
复制
function objectName(x, context, path) {

    function search(x, context, path) {
        if(x === context)
            return path;
        if(typeof context != "object" || seen.indexOf(context) >= 0)
            return;
        seen.push(context);
        for(var p in context) {
            var q = search(x, context[p], (path ? path + "." : "") + p);
            if(q)
                return q;
        }
    }

    var seen = [];
    return search(x, context || window, path || "");
}

在你的init功能中

代码语言:javascript
复制
    exScript.prototype.init = function () {
        console.log(objectName(this, eecore))
    };

正确打印exScript123

正如评论中指出的那样,这是不可靠的,而且总体上是一个奇怪的想法。你可能想要澄清你为什么需要那个--当然还有更好的方法。

票数 3
EN

Stack Overflow用户

发布于 2013-08-09 10:41:23

不确定为什么需要知道指向对象实例的/变量名称。如前所述,可以有多个名称不同的变量指向同一个实例。

如前所述,如果您需要一个惟一的id或名称,那么在创建它时将它作为exScript实例的属性创建。

如果您希望确保init仅在this constext是exScript的实例时执行,则可以执行以下操作:

代码语言:javascript
复制
var exScript = (function (undefined) {
    function exScript(inputOptions) {
        this.version = "0.0";
    }
    exScript.prototype.init = function () {
      // you can use (this instanceof exScript)
      // that will go up the prototype chain and see
      // if the current object is an instance of or inherits from
      // exScript
      // simple check: see if this is a direct instance of exScript
      if(this.constructor!==exScript){
        console.log("no good");
        return;
      }
      console.log("ok init");
      // some code here
    };
    return exScript;
})();

var e = new exScript();
e.init();//= ok init
setTimeout(e.init,100);//= no good
票数 0
EN

Stack Overflow用户

发布于 2015-04-06 04:32:30

简单的代码示例:

代码语言:javascript
复制
 function Parent(){
        // custom properties
    }

    Parent.prototype.getInstanceName = function(){
        for (var instance in window){
            if (window[instance] === this){
                return instance;
            }
        }
    };

    var child = new Parent();

    console.log(child.getInstanceName()); // outputs: "child"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18144588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档