首页 > JS中的对象名应该如何获取?

JS中的对象名应该如何获取?

拿正在学习的例子阐述下问题。

// 鸭子类型
var duck = {
    duckSinging: function () {
        console.log('gagaga');
    }
};

var chicken = {
    duckSinging: function () {
        console.log('gagaga');
    }
};

var arr = [];

var checkDuck = function (animal) {
    if (animal && typeof animal.duckSinging === 'function') {
        arr.push(animal);
        console.log('新成员:' + ??????);    // 此处想要的效果:新成员:chicken
    };
};

checkDuck(duck);
checkDuck(chicken);

Duck.prototype.constructor,他的原型对象里面的constructor指向的是duck,他的值是个字符串,可随意更改的,试下能否获取


你跑一下这个试试看,看是不是你想要的效果。

var duck = {
    name: 'duck',
    duckSinging: function () {
        console.log('gagaga');
    }
};

var chicken = {
    name: 'chicken',
    duckSinging: function () {
        console.log('jijiji');
    }
};

var arr = [];

var checkDuck = function (animal) {
    if (animal && typeof animal.duckSinging === 'function') {
        arr.push(animal);
        console.log('新成员:' + animal.name);    // 此处想要的效果:新成员:chicken
    }
};

checkDuck(duck);
checkDuck(chicken);

对象是没有名字的。你想拿的是变量名,这种方法是不存在的,因为几个变量可以指向同一个对象,如果存在这种方法的话应该返回哪个变量名呢。

比较好的处理方法是在对象中设置一个属性用来保存名称

{
  name: 'chicken',
  ...
} 

然后通过animal.name访问对象名就可以了


如果你的代码是在全局作用域下运行的,
nodejs下global,浏览器下为window
那么可以这样如下代码所示,否则就不可以~~

var duck = {
    duckSinging: function () {
        console.log('gagaga');
    }
};
var chicken = {
    duckSinging: function () {
        console.log('gagaga');
    }
};
var arr = [];
var checkDuck = function (animal) {
    for(var prop in global){
        if(global[prop]===animal){
            console.log('新成员:' + prop);        }
    }
};
checkDuck(duck);
checkDuck(chicken);
【热门文章】
【热门文章】