JS匯總---面向?qū)ο?amp;數(shù)組

面向?qū)ο?/h3>

js原型鏈的繼承

靜態(tài)屬性怎么繼承

js原型鏈以及特點(diǎn)

面向?qū)ο笥心膸讉€(gè)特點(diǎn)

封裝,繼承,多態(tài)

對(duì)象的繼承

創(chuàng)建對(duì)象的幾種方式

繼承的兩種方法。

原型鏈繼承和類繼承。然后類繼承只繼承了實(shí)例屬性,沒有原型屬性。
原型鏈繼承可以繼承所有。然后用apply和call怎么繼承原型鏈上的共享屬性?通過空函數(shù)傳值。新建一個(gè)空函數(shù)C。C實(shí)例化后C的實(shí)例屬性就是空,然后用B的apply/call去繼承C,相當(dāng)于繼承了C的實(shí)例屬性

JS怎么實(shí)現(xiàn)繼承

將父對(duì)象的一個(gè)實(shí)例賦值給子對(duì)象的原型
js實(shí)現(xiàn)繼承的5種方式

new操作符時(shí)具體是干了些什么

New:
1、創(chuàng)建一個(gè)空對(duì)象,并且 this 變量引用該對(duì)象,同時(shí)還繼承了該函數(shù)的原型。
2、屬性和方法被加入到 this 引用的對(duì)象中。
3、新創(chuàng)建的對(duì)象由 this 所引用,并且最后隱式的返回 this 。

怎么判斷屬性來自對(duì)象自身還是原型鏈

hasOwnProperty

一個(gè)對(duì)象的實(shí)例,如何統(tǒng)計(jì)被幾次調(diào)用過,分別具體被哪些函數(shù)調(diào)用過,可以有哪些方法

寫個(gè)Animal類

有個(gè)Cat類繼承它,要求新建一個(gè)Cat的實(shí)例,可以調(diào)用catch方法輸出自己的名字“大白的貓”;

實(shí)現(xiàn)私有變量

(這里當(dāng)時(shí)還沒看到相關(guān)部分,只能想到用屬性的setter、getter來做。。。??面試官各種啟發(fā)呀。。);

手寫一個(gè)類的繼承,并解釋一下

手寫JS實(shí)現(xiàn)類繼承,講原型鏈原理

數(shù)組


Array對(duì)象自帶的方法,一一列舉

var arr = [0,1,2];

1.pop():刪除數(shù)組的最后一個(gè)元素,減少數(shù)組的長(zhǎng)度,返回刪除的值。
這里是2.

2.push(3):將參數(shù)加載到數(shù)組的最后,返回新數(shù)組的長(zhǎng)度。
現(xiàn)在arr中是:0,1,2,3

3.shift():刪除數(shù)組的第一個(gè)元素,返回刪除的值,同時(shí)數(shù)組長(zhǎng)度減一。
這里是0

4.unshift(3,4):把參數(shù)加載數(shù)組的前面,返回新數(shù)組的長(zhǎng)度。
現(xiàn)在arr:中是3,4,0,1,2

5.sort():按指定的參數(shù)對(duì)數(shù)組進(jìn)行排序 ,返回的值是經(jīng)過排序之后的數(shù)組

var a = [0,1,5,10,15]; 
var b = a.sort();   // a:[1,2,3,4,5] b:[0,1,10,15,5]

正確的排序:

function compare(val1, val2) {
    return val1 - val2;
}

arr = [3,7,6];
arr.sort(compare);  // 3,6,7

6.reverse():反轉(zhuǎn)數(shù)組項(xiàng)的順序,返回的值是經(jīng)過排序之后的數(shù)組

7.concat(3,4):把兩個(gè)數(shù)組拼接起來。 返回的值是一個(gè)副本

8.slice(start,end):返回從原數(shù)組中指定開始下標(biāo)到結(jié)束下標(biāo)之間的項(xiàng)組成的新數(shù)組

var colors = ["red", "green", "blue", "yellow", "purple"];

// 一個(gè)參數(shù):[ ,+∞)
var color1 = colors.slice(1);
alert(color1);  // green,blue,yellow,purple

// 兩個(gè)參數(shù):[,)
var color2 = colors.slice(1,4);
alert(color2);  // green,blue,yellow

6splice():
刪除: 2個(gè)參數(shù),起始位置,刪除的項(xiàng)數(shù)
插入: 3個(gè)參數(shù),起始位置,刪除的項(xiàng)數(shù),插入的項(xiàng)
替換:任意參數(shù),起始位置,刪除的項(xiàng)數(shù),插入的任意數(shù)量的項(xiàng)

var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1);  // 刪除第一項(xiàng)
alert(colors);  // green,blue
alert(removed);  // red,返回?cái)?shù)組中只包含一項(xiàng)

removed = colors.splice(1, 0, "yellow", "orange");  // 從位置1開始插入兩項(xiàng)
alert(colors);  // green,yellow,orange,blue
alert(removed);  // 返回的數(shù)組是一個(gè)空數(shù)組

removed = colors.splice(1, 1, "red", "purple");  // 從位置I開始插入兩項(xiàng)
alert(colors);  // green,red,yellow,orange,blue
alert(removed);    // yellow,返回的數(shù)組中只包含一項(xiàng)

indexOf()和lastIndexOf():接受兩個(gè)參數(shù),要查找的項(xiàng)(可選)和查找起點(diǎn)位置的索引
indexOf():從數(shù)組開頭向后查找
lastIndexOf():從數(shù)組末尾開始向前查找

every():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回true,則返回true。
filter():對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成數(shù)組。
forEach():對(duì)數(shù)組的每一項(xiàng)運(yùn)行給定函數(shù),這個(gè)方法沒有返回值。
map():對(duì)數(shù)組的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。
some():對(duì)數(shù)組的每一項(xiàng)運(yùn)行給定參數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true,則返回true。以上方法都不會(huì)修改數(shù)組中的包含的值。

reduce()和reduceRight():縮小數(shù)組的方法,這兩個(gè)方法都會(huì)迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值。

join(separator):將數(shù)組的元素組起一個(gè)字符串,以separator為分隔符,省略的話則用默認(rèn)用逗號(hào)為分隔符

var a = [1,2,3,4,5]; 
var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5"

Array對(duì)象自帶的排序函數(shù)底層是怎么實(shí)現(xiàn)的

數(shù)組去重

思路:
1.創(chuàng)建一個(gè)新的數(shù)組存放結(jié)果
2.創(chuàng)建一個(gè)空對(duì)象
3.for循環(huán)時(shí),每次取出一個(gè)元素與對(duì)象進(jìn)行對(duì)比,如果這個(gè)元素不重復(fù),則把它存放到結(jié)果數(shù)組中,同時(shí)把這個(gè)元素的內(nèi)容作為對(duì)象的一個(gè)屬性,并賦值為1,存入到第2步建立的對(duì)象中。
說明:至于如何對(duì)比,就是每次從原數(shù)組中取出一個(gè)元素,然后到對(duì)象中去訪問這個(gè)屬性,如果能訪問到值,則說明重復(fù)。

Array.prototype.unique3 = function(){
    var res = [];  // 創(chuàng)建一個(gè)新的數(shù)組存放結(jié)果
    var json = {};  // 創(chuàng)建一個(gè)空對(duì)象
    for(var i = 0; i < this.length; i++){
        if(!json[this[i]]){  // json不為空的時(shí)候
            res.push(this[i]);  // 把元素依次放入到res中
            json[this[i]] = 1;  //?
        }
    }
    return res;  // 返回res
}

var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
alert(arr.unique3());  // 調(diào)用unique3函數(shù)

數(shù)組去除一個(gè)函數(shù)。

用arr.splice。又問splice返回了什么?應(yīng)該返回的是去除的元素。

你知道偽數(shù)組嗎

這里把符合以下條件的對(duì)象稱為偽數(shù)組:
1,具有l(wèi)ength屬性
2,按索引方式存儲(chǔ)數(shù)據(jù)
3,不具有數(shù)組的push,pop等方法


1,function內(nèi)的arguments
2,通過document.forms,F(xiàn)orm.elements,Select.options,document.getElementsByName() ,document.getElementsByTagName() ,childNodes/children 等方式獲取的集合(HTMLCollection,NodeList)等。
3,特殊寫法的對(duì)象 ,如

var obj={};  
obj[0] = "一";  
obj[1] = "二";  
obj[2] = "三";  
obj.length = 3;

那你重新設(shè)計(jì)一下這個(gè)函數(shù),讓它直接擁有數(shù)組的方法吧

// 方法一、 聲明一個(gè)空數(shù)組,通過遍歷偽數(shù)組把它們重新添加到新的數(shù)組中,大家都會(huì),這不是面試官要的
 var aLi = document.querySelectorAll('li');
     var arr = [];
     for (var i = 0; i < aLi.length; i++) {
         arr[arr.length] = aLi[i]
     }

// 方法二、使用數(shù)組的slice()方法 它返回的是數(shù)組,使用call或者apply指向偽數(shù)組 
var arr = Array.prototype.slice.call(aLi);

實(shí)現(xiàn)sum(2,3);sum(2,3,4);sum(2,3,4,5);

(我用了比較原始的方法,if來判斷)

那如果sum里面的參數(shù)不確定呢

(提取arguments的長(zhǎng)度,用for循環(huán))

手寫一個(gè)遞歸函數(shù)(考察arguments.callee,以及arguments的解釋)

// arguments.callee 是一個(gè)指向正在執(zhí)行函數(shù)的指針
function factorial(num) {
    if (num <= 1) {
        return 1;
    }
    else {
        return num * arguments.callee(num - 1);
    }
}

若干個(gè)數(shù)字,怎么選出最大的五個(gè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容