js學習之面向對象(特別粗糙版,倒~)

  1.  類 
  2.  原型
  3.  原型鏈

比如:

window對象 

string對象

     substring / indexof 

number對象

     tostring

function對象

     call / bind

array對象 

     concat / join 

  1. array number 可以通過 prototype 找到自己的原型鏈 
  2. string 通過 typeof 找到自己的原型鏈
  3. 數組通過 constructor 找到自己的原型鏈

所有的類都繼承於 object ,而 object 有靠着window 活着。

再比如

      你給object 添加一個 a 屬性,那麼string,數組等等 一切繼承於object的對象,便都會多出來這個屬性。

 

或者 還可以 採用 下圖的方式: 

 

 

 在補充兩個

再再再比如,代碼如下: 

    <script type="text/javascript">
       function show(){
           console.log(Object.prototype.toString.call(arguments));
       }
        
       show();
    </script>

 運行結果如下

 

這篇真不好意思,寫的太亂了,就這樣,還想插句別的話。

內心不夠篤定的人,便總會覺得這個世界也不夠穩定。

他總以爲是世界在動盪,其實是他的內心不夠安定。

 

不同對象互相借用method

       // 本來的,字符串的小區別
       var str = "str===stringToArray";
       console.log(str.split(''));

       var strA = ["strA===stringToArray"];
       // 這樣不行,這樣會報錯
       // 00_ES6_demo6_面向對象.html:24 Uncaught TypeError: strA.split is not a function
       // 數組不提供這個方法。
       //    console.log(strA.split(''));
       // 怎麼辦 ? =》 
       // 因爲數組自己沒有split這個方法
       // 所以數組就找字符串去借用這個函數(用call的方式)
       console.log(String.prototype.split.call(strA));
       // 字符串也找數組去借個函數(用bind的方式)
       console.log(Array.prototype.join.bind('abcdef')());

 運行結果

 json對象借用string類型的示例:

       var json = {a:20,b:30,length:2};
       console.log(String.prototype.indexOf.call(json.a,0));
       // 如果是json的話,那麼就相當於 json.toStirng()
       // 所以輸出來的是 [object Object]
       // 所以用的字符串的方法,處理的也都是 [object Object]
       // 相當於'[object Object]'.indexOf('o');
       console.log(String.prototype.indexOf.call(json,'o'));
       // 相當於'[object Object]'.substring(0);
       console.log(String.prototype.substring.call(json,0));
       // 相當於'[object Object]'.substring(6,7);
       // from 6 to 7
       console.log(String.prototype.substring.call(json,6,7));

 運行結果

 總結

       // 原型鏈
       // 下面的那個a 呀 b 呀好像就是show的原型鏈,他是個鏈
       function show(){
           console.log(1);
        }
        
        var a = show;
        console.log("console.log(a);");
        console.log(a);
        console.log("console.log(a.prototype);");
        console.log(a.prototype);
        console.log("new a();");
        new a();
        
        // 給show追加一個 屬性
        show.prototype.addprop = function (){
            console.log("show.prototype.addprop");
        }
        
        // 調用
        console.log("var b = new show();");
        var b = new show();
        b.addprop();

 運行結果:

constructor() 是class 被new 對象的時候 ,最先執行的函數。 

 

舉個例子:

選項卡的面向對象實現版 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章