續上一遍《說幾道有意思的面試題》

《說幾道有意思的面試題》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

相關文章
相關標籤/搜索