理解物件導向的幾個問題須知?

2022-06-03 22:30:31 字數 2949 閱讀 8876

第乙個問題:什麼是作用域?

第二個問題:作用域在上面情況下形成?

第三個問題:什麼是變數提公升,作用域鏈?

第四個問題:「=」賦值運算

第五個問題:生成物件的有幾種方式?

第六個問題:物件導向的三大特點

第七個問題:原型鏈

第八個問題:prototype和__proto__的區別?

第九個問題:json和object的區別?

第十個問題:類和例項的關係?

第十乙個問題:工廠模式和建構函式生成例項物件的指向?

第十二個問題:類的原型指定或不指定乙個物件?

第十三個問題:this的指向問題和方法中this的指向問題?改變this的幾種方法?

第十四個問題:鏈式寫法的實現原理?

第十五個問題:原型的批量新增和物件新增的區別?

第十六個問題:怎麼給內建物件新增方法?

第十七個問題:什麼是深拷貝和淺拷貝?

第乙個問題:什麼是作用域?

首先我們要知道什麼是作用域?瀏覽器給(js)的生存環境就叫作用域,也叫棧記憶體。

當然還有乙個堆記憶體,什麼是堆記憶體就是存放**塊的空間。

第二個問題:作用域在上面情況下形成?

(1)瀏覽器天生有乙個全域性叫window

(2)函式執行時會形成乙個私有作用域

第三個問題:什麼是變數提公升,作用域鏈?

這是變數提公升它也叫預解釋,js**執行前,瀏覽器會給js乙個全域性環境也叫全域性作用域(也叫window),window分兩個模組,儲存模組和執行模組,儲存模組找到所有待var 和 function 的關鍵字,給這些遍歷新增記憶體位址,執行模組**從上到下執行,遇到變數就去儲存模組查詢,看有沒有,有就看賦值沒有賦值就是後面的值,沒賦值就是undefined,沒有就是 is not defined。

函式內部的變數被使用時,首先會在自己的私有作用域下查詢是否有這個變數,有就使用,沒有就向它的父級查詢,父級有就使用,沒有就繼續向上查詢,直到查詢到window,window有就使用沒有就是is not defined。這種查詢機制我們叫作用域鏈。

第四個問題:「=」賦值運算

=賦值運算,就是把等號後面的值賦給等號前面的變數。

後面的資料分兩種

基本資料型別:基本資料型別就是簡單的賦值。

引用資料型別(復合資料型別)就是把記憶體位址賦值給變數。

第五個問題:生成物件的有幾種方式?

第一種:單例模式

第二種:工廠模式

第三種:建構函式

第四種:類的例項

其中建構函式扮演三種角色,普通物件,普通函式,和類

第六個問題:物件導向的三大特點

封裝:減少**冗餘,提高**重複利用率

繼承:子類繼承父類。

多型:以後在說

第七個問題:原型鏈

duixiang.shuxing 的時候,首先看這個屬性是私有的還是公有的,私有有就直接使用,如果私有屬性沒有那就找公有的,公有有就使用,公有屬性沒有那就通過__proto__找它類上有沒有,直到找到基類object,如果object沒有那就是undefined。

第八個問題:prototype和__proto__的區別?

他倆都是原型,prototype是函式屬性,__proto__是物件屬性,prototype是給程式設計師用的,__proto__用於給瀏覽器查詢原型的。

第九個問題:json和object的區別?

二者長得一樣,都是以鍵值對形式存放,object可以不帶引號,json必須帶引號,object是前端資料型別,json是資料庫存放資料的資料格式。

第十個問題:類和例項的關係?

每個類(函式)都有乙個prototype屬性,屬性是個物件,裡面有乙個constructor屬性,指向當前類本身。

每個例項(物件)都天生有乙個__proto__的屬性,屬性也是個物件,它指向當前類的原型。

第十乙個問題:工廠模式和建構函式生成例項物件的指向?

工廠模式生成的例項物件的__proto__直接指向基類object的原型。

建構函式生成的例項物件的__proto__指向它父類的原型,父類的原型的__proto__再指向基類obcect的原型。

第十二個問題:類的原型指定或不指定乙個物件?

如果不給這個類的原型指定乙個物件,這個例項物件的__proto__上有乙個constructor的屬性。

如果給這個類的原型指定乙個物件,這個例項物件的__proto__就沒有constructor屬性。

第十三個問題:this的指向問題和方法中this的指向問題?改變this的幾種方法?

1.this是乙個物件,函式外的this指向window

2.函式內的this,給函式在哪定義沒關係,給函式在哪呼叫有關,看函式前面有沒有 . 有點this就指向點前面的物件,沒有就指向window。

3.定時器裡的this永遠指向window,自執行裡的this也指向window。

4.建構函式和原型上的this指向它的例項物件

5.方法中this,在呼叫方法時,看方法點前面是誰,this就指向誰。

改變this有幾種方法?

提前宣告乙個變數,var _this=this

bind() 只改變函式內this,不執行函式,如果執行就要人為定義,在後面加有關()

第十四個問題:鏈式寫法的實現原理

每個方法使用完畢之後,不僅可以得到想要的結果,還需要把例項物件給呼叫,才可以實現鏈式寫法。

第十五個問題:原型的批量新增和物件新增的區別?

第十六個問題:怎麼給內建物件新增方法?

有兩種,用物件形式新增,會不起作用,array.prototype=錯的,瀏覽器會保護內建物件的原型位址

批量新增:是可以的 array.prototype.age=45;

第十七個問題:什麼是深拷貝和淺拷貝?

淺拷貝:就是將乙個物件的屬性乙個乙個的複製到另乙個物件,主要針對第一層的。

深拷貝:如果物件中的屬性值又有乙個引用資料型別,淺拷貝還會把後面的引用資料型別位址賦給空物件的屬性,深拷貝會把屬性值乙個乙個的遍歷賦值。

幾個問題的

1.寫乙個函式返回引數二進位制中 1 的個數 比如 15 0000 1111 4 個 1 程式原型 int count one bits unsigned int value 解 無符號整型為32位,所以利用迴圈32次,逐個判斷二進位制每一位是不是1 int count one bits unsig...

String的幾個問題

1.已知strcpy的函式原型 char strcpy char strdest,const char strsrc 其中strdest 是目的字串,strsrc 是源字串。不呼叫c c 的字串庫函式,請編寫函式 strcpy。答案 char strcpy char strdest,const ch...

幾個問題的思考

對幾個問題的思考,對自己一種警醒也是總結,鞏固和提高 1.flex是什麼?某天早上躺在床上問起了自己這個問題,自己總結了乙個答案 flex是乙個面向程式設計師,基於元件,使用mxml標籤和as指令碼語言進行開發,同時基於事件並且資料互動方式為非同步的框架。2.怎麼成為傳說中的高手或者技術牛人?所謂的...