先看乙個真實的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代指實參陣...