码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript如何获取对象实例的名字

时间:2015-07-06 23:24:42      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

  大家都知道JavaScript是一种面向对象的语言,对象可以通过new关键字,实例化出来,但是,如果我想获取实例化对象的名字,怎么破?比如:

1 function Dog() {
2     this.myName = function() {
3     }
4 };
5 
6 var dog = new Dog();

  如何获取这个dog的名字"dog"呢?大家想过没,可以先想想!

  其实大家想过没有,定义的全局变量为什么能够直接访问使用呢?实际上全局变量是绑定在window对象上的,都是window对象的属性,如下:

1 var age = 20;
2 console.log(window.age);  // 输出 20

  好了,我们返回上面的例子,那么dog其实也是绑定在window对象上的,如下:

1 function Dog() {
2     this.myName = function() {
3     }
4 };
5 var dog = new Dog()
6 console.log(window.dog); // 输出 Dog {}

  那么接下来,就可以利用这个特点,来搞点什么,如下:

 1 function Dog() {
 2     this.myName = function() {
 3                 
 4         // 这里循环查找window对象中的dog属性
 5         for (var name in this.global) {
 6                       
 7             // 判断是否为Dog类
 8             if (this.global[name] === this) {
 9                 return name;
10             }
11         }
12     }
13 }
14 
15 // 这里,将window对象的引用,存到Dog原型的global中
16 Dog.prototype.global = this;
17 
18 var dog = new Dog();
19 
20 console.log(dog.myName());  // 输出"dog"            

  就这样,就获取了实例化对象的名字了,nice!

  总结:

  1. 该方法的主要原理是通过全局变量的存储机制,是绑定在window对象上的;
  2. 什么时候需要去获取实例化对象的名字呢?一般的场景都不需要吧,这个主要是dog是个对象,但是我时候要把它当做字符串来用,比如打印日志,构造了"dog"对象,这个时候,其实就派上用场了。
  3. dog是自己实例化的,肯定是随机的,这时,只能通过一个中间媒介来存储,并实现转化。

JavaScript如何获取对象实例的名字

标签:

原文地址:http://www.cnblogs.com/pijiaxiang/p/4625634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!