javascript - JS中的对象名应该如何获取?
伊谢尔伦
伊谢尔伦 2017-04-10 16:40:30
[JavaScript讨论组]

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

// 鸭子类型
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);
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
PHP中文网

如果你的代码是在全局作用域下运行的,
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);
天蓬老师

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

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

{
  name: 'chicken',
  ...
} 

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

PHP中文网

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

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);
天蓬老师

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号