面向對象

面向對象面試

  1. 構造函數裏的屬性怎麼看?看this,誰前面有this誰就是屬性

num 不是屬性,是私有做用域下的私有變量。數組

  1. 如何查找面向對象中的this。
  2. 構造函數裏的this執行實例對象
  3. 若是是方法中的this

(1)      找到this  在調用方法時看方法前面的「.」是誰,this就是誰瀏覽器

(2)      替換this   將this換成你找到的那個結果函數

(3)      精確查找   用原型鏈查找模式去分析學習

3.關於構造函數的返回值問題this

   構造函數也是函數,每一個函數都有返回值,構造函數返回的是this。prototype

 

上面的這種能夠經過.來實現的多個方法 咱們把他叫作鏈式寫法。對象

實現原理:每一個方法使用完畢以後,不只能夠獲得想要的結果,還須要把當前實例對象返回,才能夠實現鏈式寫法。遞歸

4.對象分析內存

 

之後咱們使用內置方法,出現內置方法報錯

  1. 方法名寫錯。
  2. 內置方法的歸屬出錯。
  3. 原型的批量添加和直接對象添加的區別

 

若是是批量添加屬性,沒有改變原型的內存地址(瀏覽器開闢的)

若是是以對象形式添加,就會更改原型的內存地址,瀏覽器開闢的就被銷燬了。

 

 

 

6.怎樣給內置對象添加方法

若是給內置類的原型添加方法,使用對象形式添加,不起做用。

Array.prototype={sun:function...}  xxx  錯的 瀏覽器會保護內置對象的原型內存地址,不讓人爲修改,只能使用批量的形式添加方法

Array.prototype.sun=function...

騰訊18年春招面試題

 

Jk.age++  等價於 jk.age=jk.age+1  先經過jk.age查找私有的age屬性,沒有,再找公有的age屬性,有是20,而後加1爲21.再賦值給jk的私有屬性age。

Rs.aword.push(「oo」) 先rs查找私有的aword屬性,沒有,在查找公有的aword屬性,有,結果是數組,引用數據類型,又會開闢一個內存地址,存放數組,將內存地址賦值給aword,而後去給這個地址中的aword添加了一個oo的元素。Jk.aword查找私有的,沒有,再查找公有的,有,可是aword是內存地址,再向這個內存地址去查看這個數組,rs和jk查找的aword都是同一個內存地址的數組,因此一改則全改。

 

複習數組的方法

1.pop push shift unshift split

學習內置對象的方法

  1. 方法的功能
  2. 方法的參數
  3. 方法的返回值

拷貝

  1. var obj={}  var obj2=obj

 嚴格的說這個就是將obj的內存地址賦值給obj2

  1. 淺拷貝 其實就是將一個對象的屬性一個一個的複製到另外一個對象中去主要針對第一層的屬性。

藉助for  in

 

  1. 深拷貝:若是對象中的屬性值又是一個引用數據類型,淺拷貝,仍是把後面的引用數據類型的地址賦值給空對象的一個屬性,深拷貝,將屬性值也一個一個的遍歷賦值。

 

 

function extend(oldobj,newobj){

          for(var key in oldobj){

               var item=oldobj[key];

               if(item instanceof Array){ //數組

                    newobj[key]=[]

                    extend(item,newobj[key]) //遞歸

               }else if(item instanceof Object){ //對象

                    newobj[key]={};

                    extend(item,newobj[key])

               }else{  //基本類型

                    newobj[key]=item;

               }   

          }

     }

相關文章
相關標籤/搜索