面試之筆試篇(JS內建原型方法)

2021-10-05 08:44:41 字數 3770 閱讀 4206

先看乙個真實的new

var

dog=

function

(name)

dog.prototype.

getname

=function()

var dog =

newdog

('miao'

)console.

log(dog.

getname()

)// 'miao'

實現乙個_new函式

function

_new

(fn,

...args)

//如果建構函式有返回值,並且是物件,還有可能是return new xx() 類似這樣的

varfoo

=function()

}var dog =

_new

(dog,

'wang'

)console.

log(dog.

getname()

)// 'wang'

var xx =

_new

(foo)

console.

log(xx.name)

// 'xx'

可參考之前寫的一篇手寫promise,主要還是要弄懂鏈式呼叫的實現機制。

function.prototype.

call1

=function

(context = window,

...args)

function.prototype.

=function

(context, args)

測試**

var obj =

}var name =

'我是全域性變數'

console.

log(obj.getname.

call1

(obj,

'哈哈'))

console.

log(obj.getname.

call1

(undefined,

'哈哈'))

console.

log(obj.getname.

(null,[

'哈哈'])

)

// 實現乙個bind

function.prototype.

bind1

=function

(context,

...args)

const fn =

this

;const

resfn

=function

(argsrs)

// 考慮原型鏈的問題,使用了寄生式組合繼承

// function create(proto)

// tmp.prototype = proto;

// return new tmp()

// }

// resfn.prototype = create(this.prototype);

resfn.prototype = object.

create

(this

.prototype)

;return resfn

}// 測試

var obj1 =

const foo = obj.getname.

bind1

(obj1,

'haa'

)foo

('111'

)//xx1haa

// 實現乙個json.parse()

varparse

=function

(str)

/**

* 思路:

* 1.對 number、null、boolean、string基礎型別資料原樣返回,「undefined|函式」 返回 undefined

* 2. 引用型別,刪除值為「undefined|函式」 的物件屬性,將值為 「undefined|函式」 的陣列元素輸出為null

* 3. 關於深層巢狀的物件,遞迴即可

*/// 值是 undefined|函式

function

isundeforfun

(type)

function

isstring

(val)

function

stringify

(obj)

else

"` }

}else":$

` }

else"`;

if(isarray)

str +=`,$

` }

else":$

`;}}

}}str = str.

substring(1

)return

(isarray ?

`"[$

]"`:

`"}"`)}

}

// 實現乙個繼承

function

parent

(name)

parent.prototype.

getname

=function()

function

child

(name, parentname)

function

create

(obj)

f.prototype = obj;

return

newf()

}child.prototype =

create

(parent.prototype)

child.prototype.constructor = child

// child.prototype = object.create(parent.prototype)

var child =

newchild

('小明'

,'美呀'

)console.

log(child.name)

console.

log(child.

getname()

)

//實現乙個object.create()

function

create

(obj)

f.prototype = obj

return

newf()

}

// 實現乙個instanceof

// 右邊的原型在左邊的原型鏈上可以找到

function

instanceof

(left, right)

}var a =

console.

log(

instanceof

(a,object)

)

[[1,2],[3]].flat() => [1,2,3]

array.prototype.

flat1

=function()

else

}return ret

}

面試之技術面試篇

6 網路 這也是常考的部分。主要考查點有 osi參考模型,tcp ip參考模型。以下是我遇到過的具體面試問題 1 請解釋一下osi參考模型。中國信保 2 請解釋一下tcp ip參考模型。中國信保 3 為什麼現在的網路最後採用了tcp ip參考模型而沒用osi參考模型?中國信保 總結 這部分面試主要考...

幾個js面試筆試題

陣列去重,需要考慮到 第一種,借用物件關鍵字的唯一性 function uniq arr 物件關鍵字的唯一性 let uniqarr for let i 0,l arr.length i l i turnobject arr i arr i uniqarr.push arr i return uni...

JS筆試面試題(後續更新)

1.下面 的執行結果是?var length 10 function fn var obj obj.method fn,1 答案 10 2 解析 首先,fn 執行時的this是指向window的,因為這個函式是作普通函式呼叫的,普通函式呼叫,this指向window。然後arguments代指實參陣...