JavaScript如何獲取對象實例的名字


  大家都知道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是自己實例化的,肯定是隨機的,這時,只能通過一個中間媒介來存儲,並實現轉化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM