编程题
修改 this 指向#
- 封装函数 f,使 f 的 this 指向指定的对象
function bindThis(f, oTarget) {
return function(...args) {
//return f.apply(oTarget, args)
//return f.call(oTarget, ...args)
return f.bind(oTarget)(...args)
}
}
dom 节点查找#
查找两个节点的最近的一个共同父节点,可以包括节点自身
function commonParentNode(oNode1, oNode2) {
while(true){
oNode1 = oNode1.parentNode;
if(oNode1.contains(oNode2)){
return oNode1;
}
}
}
根据包名,在指定空间中创建对象#
输入: namespace({a: {test: 1, b: 2}}, 'a.b.c.d')
输出: {a: {test: 1, b: {c: {d: {}}}}}
function namespace(oNamespace, sPackage) {
const packageList = sPackage.split('.')
let returnObj = oNamespace
packageList.forEach(item => {
if(!(item in returnObj)){
returnObj[item] = {}
}
returnObj = returnObj[item]
})
return returnObj
}
数组去重#
为 Array 对象添加一个去除重复项的方法
Array.prototype.uniq = function () {
return [... new Set(this)]
}
斐波那契数列#
用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等
function fibonacci(n) {
if(n === 1){
return 1
}
if(n === 2){
return 1
}
return fibonacci(n-1) + fibonacci(n-2)
}