第一題
1var fun = function
();6} 7
var p = new
fun();8//
請問p.name是:jack
第二題
1var fun = function()6
7var p = new
fun();8//
請問p.name是:peter
1,2題考察的是建構函式的返回值的問題。
每個函式都有返回值,如果使用了return
語句,則返回return
後跟的值,如果沒有使用return
,則預設返回undefined
.
特別的,如果這個函式是建構函式,則預設返回this
物件,如果建構函式內使用了return
語句,並且return
後跟的是乙個物件,則這個建構函式返回的是這個物件,否則返回this
.
所以1題中的p =
,而2題中的p =
.
第三題(涉及到get了)
1var fun = function
(){}
23 fun.prototype =8}
910var a = new
fun();
11var b = new
fun();
1213 a.info.name = 'jack';
14 b.info.name = 'tom';
1516
//請問a.info.name和b.info.name分別是:tom tom
第四題
1var fun = function()6
}78var a = new
fun();
9var b = new
fun();
1011 a.info.name = 'jack';
12 b.info.name = 'tom';
13//
請問a.info.name和b.info.name分別是:jack tom
第五題 (只有set)
1var fun = function
(){}
23 fun.prototype =78
var a = new
fun();
9var b = new
fun();
1011 a.name = 'jack';
12 b.name = 'tom';
13//
請問a.name和b.name分別是:jack tom
關於第五題的理解:
給某個物件設定乙個屬性的時候,是不涉及訪問該屬性的。
給a設定name屬性時,只會檢查這個屬性是否存在(此時在這個物件上),如果這個屬性存在,不會去訪問它的值,直接用新值覆蓋,如果不存在,則直接新增。整個過程不存在值的訪問,也就沒有查詢原型鏈的過程。
第六題
1var fun = function()6
}78 fun.prototype =13}
1415
var a = new
fun();
16var b = new
fun();
1718 a.info.name = 'jack';
19 b.info.name = 'tom';
20//
請問a.info.name和b.info.name分別是:jack tom
3, 4, 5, 6題都是考察prototype
的知識。
以下內容我假設你知道一些物件導向的概念。
js裡面,乙個例項(以下都用p)的[[proto]]屬性指向這個類(以下用fun)的原型,如果用等號表示指向的話就是
p.[[proto]] = fun.prototype
然後另一條規則就是,當訪問乙個物件a的屬性時,會先檢查a是否有這個屬性,如果有,則返回這個屬性的值,如果沒有則檢查a的[[proto]]是否有該屬性,有則返回,無則繼續檢查a的[[proto]]的[[proto]]直到檢查到或者[[proto]]為null為止。
注:[[proto]]是ecmascript標準裡的屬性,瀏覽器實現的時候使用的是__proto__
所以第3題:
a.info = a.__proto__.info = b.info = b.__proto__.info = fun.prototype.info =
他們是屬於引用相等,所以更改a.info.name的值時,b.info.name, fun.prototype.info的值也會跟著改變。 4,5,6 題不再累述。
不過第五個和第三個理解上有點問題。
1var fun = function
(){}
23 fun.prototype =8}
910var a = new
fun();
11var b = new
fun();
1213 a.info.name = 'jack';
14 b.info.name = 'tom';//
這句如果改成 b.info = {};b.info.name='123';這樣就和第五個一樣的效果了。
//請問a.info.name和b.info.name分別是:
jack , 123
b.info.name = 'tom'; 賦值的時候並不能在b下 找到b.info 所以只能去fun.prototype中把tom賦值給fun.prototype中的name值了。
而如果b.info已經存在的情況,他就不需要去fun.prototype下去尋找和賦值了。
以上摘抄網上的內容,作為自己的筆記
幾道前端面試題
這幾天跑了好多宣講會,也做了不少筆試,給我印象最深的還是這些筆試題沒有一道和前端技術有關的,大多數都是演算法題 1.在乙個字串中找到第乙個只出現一次的字元。如輸入abaccdeff,則輸出b.這題我做的時候一直在想怎麼用js寫出來,想了好久感覺沒寫好,於是回來後仔細思考了下,總算是寫出來比較滿意的解...
前端面試題
sprites是什麼和為什麼要使用他們?css 精靈 把一堆小的整合到一張大的上,減輕伺服器對的請求數量 有可能替代sprites的方法是什麼?svg圖示,字型圖示,字元編碼等等。1 在div排版的時候,假設現在是100px的寬,我在盒子左側用padding left留個10px的白,div就撐開了...
前端面試題
行內元素有哪些?塊級元素有哪些?空 void 元素有哪些?link和 import的區別是?常見相容性問題?含移動端 html5的離線儲存?描寫一段語義化的html 吧 html5的form如何關閉自動完成功能?什麼是閉包 closure 為什麼要用?localstorage和sessionstor...