续上一遍《说几道有意思的面试题》

《说几道有意思的面试题》html

  1. 祖传代码的重构
function Add(...){
	...
}
//上面部分是不能够修改的
//在这里开始手写代码实现需求
var count = 0;
var newCount = 0;
//在函数底下再命名一个相同名字的函数,再去调用原来的函数,加一些计数的操做。
function Add(...){
	//经过判断原型链上是否存在add
	if(this instanceof add){
    	//new 出来的对象
        newCount++;
    }else{
    	count++;
    }
    //这里调用仍是会调用自己,不会调用上面的函数。这里还没想通,但愿获得指点。
    Add(...);
}
...
复制代码
function add (){
	console.log(this instanceof add);
}

var a = new add();//true
add();//flase
复制代码
  1. 函数柯里化
function go(key){
	var str = "go"
	if(key){
		return str+key;
	}
    var goo=function(key){
    	if(key){
        	return str + key
        }else{
			str =str+"o";
        	return goo
        }
    }
	goo(key);
	return goo
}
console.log(go("d"),go()("d"),go()()("d"));//god good goood

复制代码
  1. 实现MVVM
<html>
	<body>
    	<input type="text" id="input"/>
        <div id="show"></div>
    </body>
    <script>
    //实现input输入框和show 双向绑定
    function defineProperty(obj,attr){
    	var value = "";
        Object.defineProperty(obj,attr){
        	get:function(){
            	return value;
            },
            set:function(newValue){
            	if(newValue===value){
                	return;
                }
                value = newValue;
                document.getElementById("input").value = newValue;
                document.getElementById("show").innerHTML = newValue;
            }
        }
    }
    var obj = {};
    defineProperty(obj, "txt");
    document.getElementById("input").addEventListener("keyup", function(e){
            obj.txt = e.target.value;
    })
    </script>
</html>

复制代码

参考连接面试

  1. 实现一个简单的mixin
function mixin(sourceObj,targetObj){
	for(var key in sourceObj){
    	if(!(key in targetObj)){
        	targetObj[key] = sourceObj[key];
        }
    }
    return targetObj;
}
复制代码

参考《你不知道JavaScript(上)》 P135bash

相关文章
相关标签/搜索