js 零碎知識整理

快速刪除尾部數組

var arr=[1,2,3,4,5];
arr.length=3;
console.log(arr)//[1,2,3]

直接改變數組的length的值數組

從數組中移除重複元素

var arr = [1,1,2,2,3,3]
const removeDuplicateltems = arr => [...new Set(arr)];
console.log(removeDuplicateltems(arr))//[1,2,3]
/**
* ...拓展運算符,是遍歷Symbol.iterator 
* 和for...of同樣的遍歷方法
*/

函數做爲值傳入

//把函數做爲值傳入進去
    function callSomeFunction(someFunction,someArgument){
      return someFunction(someArgument);
    }

最終調用的這個函數 他有兩個參數, 第一個參數是一個方法 , 第二個參數是第一個方法的參數。瀏覽器

function add10(num){
      return num + 10;
    }
    var result1=callSomeFunction(add10,10);
      console.log(result1);//20

這個例子稍微一看就明白了吧, 傳入的10 最終成了add()的參數, 也就是成了num, 因此結果是20函數

function getGreeting(name){
      return "holle," + name;
    }
    var result2=callSomeFunction(getGreeting, "Nicholas");
    console.log(result2);//holle Nicholas

上面的理解了 這個也就不難了 同理 「 Nicholas」 變成了getGreeting() 的參數 name,因此輸出結果是 holle Nicholasthis

call() 理解

先看看關於call()的官方解釋,「調用一個對象的一個方法,以另外一個對象替換當前對象。」,看了這樣的解釋,或許讓你更摸不着頭腦了。看例子:指針

var x = "我是全局變量";    //定義全局變量x
function a(){         //定義函數類結構a  
    this.x = "我是在函數類結構a中聲明的哦";    
}
//定義普通函數,彈出當前指針所包含的變量x的值
function f(){       
    alert (this.x);
}
f.call(new a());//返回值爲「我是在函數類結構a中聲明的哦」

個人理解是,f.call(new a())就是把函數(其實也是對象)f複製到被調用對象「new a()」下面去解析,事實上和下面這段代碼的解析結果同樣:code

function a(){
  this.x = "我是在函數類結構a中聲明的哦";
  alert(this.x);    //我是在函數類結構a中聲明的哦
}
a();

只不過此時變量X的做用域不一樣而已,咿…看起來好像有點繼承的味道哦,難道不是嗎?在上例中,f徹底被構造函數a的實力對象繼承了,若是說這還不足以說明a.call(b)是一種繼承模式,那麼再看一個更具備繼承味道的用法吧。對象

function f(){    
    this.a ="a";    
    this.b = function(){    
        alert("b");
    }
}
function e(){    
    f.call(this);     
}
var c = new e();
alert(c.a);  //彈出a
c.b();    //彈出b

在這個例子中,只要會使用瀏覽器的朋友,都能看得出來e徹底繼承了f的屬性和方法,不然是沒法解釋的,由於在e中並無定義屬性a和b,那麼按常理推斷在e的實例對象c中,並不會出現這兩個屬性。繼承

相關文章
相關標籤/搜索