原生js方法笔记汇总 (持续更新)

1. 字符串去重:

 1 function re(str){
 2     for (var i = 0,arr=[]; i < str.length; i++) {
 3         for (var j = 0; j < arr.length; j++) {
 4             if(arr[j]===str[i]){  
 5                 break;
 6             }
 7         };
 8          if (j===arr.length) {
 9             arr.push(str[i]);
10         };
11     };
12        console.log(arr.join(""))
13 }
14 
15 re("stdgdsgrn")  

2. 原生call()

模拟call方法的实现:
  1.第一步,(fun的this绑定给xm ) 把this绑定给xm
    把fun当成xm对象的方法添加,使之成为xm内部方法(内部结构改变),使用之后删除
  2.delete fun
  3.第二步,call 函数可以传入参数,参数不确定
  4.利用arguments对象来获取参数,从1开始到length结束
  5....

 1 var xm={
 2     work:"engineer",
 3     };
 4 
 5 function fun(sname,sage){
 6     return {
 7         work:this.work,
 8         sname:sname,
 9         sage:sage
10     }
11 };
12 
13 Function.prototype.myCall=function(obj){
14     var obj= obj||window;
15     obj.fn=this;
16     //取出arguments的参数,放入fn()
17     for (var i = 1,arr=[]; i < arguments.length; i++) {
18         arr.push("arguments["+i+"]");
19     };
20     // 数组和字符串相加,拼接,数组会转化为字符串,因为那些函数的爹里面都有toString
21     var result=eval('obj.fn('+arr+')');
22     delete obj.fn;
23     return result; //返回对象必须写在后面
24 }
25 
26 console.log(fun.myCall(xm,"xx",20));

3.浅克隆

克隆小红对象(浅)------intervieeeeeeeew ----------------------------
思路:新建 遍历 赋值 返回

 1 function clone(obj){
 2     var newObj=new Object();
 3     //遍历obj key是一个变量
 4      for(key in obj){
 5            newObj[key]=obj[key];
 6       }
 7       return newObj;
 8 
 9 }
10 
11  var clonexh=clone(xh);
12 console.log(clonexh);
13 console.log(clonexh===xh);//false 
14  //因为在内存中地址不一样,只是内容相同
15                         console.log(clonexh.getName===xh.getName);//true 
16  //克隆时,getName是函数-引用类型,把地址赋值给了newObj
17  //一共只有一个getName函数

4.深克隆:

 1 function deepClone(arr){
 2     if(typeof arr != "object"){
 3         return arr;
 4     };
 5     var result = {};
 6     for(var i in arr){
 7         result[i]=deepClone(arr[i]); //递归调用
 8     }
 9     return result;
10 };
11 
12 
13 var a = {
14     name:"Desiree",
15     age:"24",
16     hobby:"Ice-Skating"
17 };
18 var b = deepClone(a)
19         

猜你喜欢

转载自www.cnblogs.com/jliu520222/p/9783088.html
今日推荐