标签:
大家都知道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!
总结:
标签:
原文地址:http://www.cnblogs.com/pijiaxiang/p/4625634.html