JavaScript 5 面試題一原型和原型鏈

2021-08-08 19:57:43 字數 2923 閱讀 7413

一、題目

1、如何準確判斷乙個變數是陣列型別?

var array=;

console.log(array instanceof array);//true 判斷引用型別的具體型別要用instanceof

console.log(typeof array);//object

2、寫乙個原型鏈繼承的的例子

//封裝乙個dom查詢例項

function elem(id)

elem.prototype.html=function(val)else

}elem.prototype.on=function(type,fn)

var dev=new elem('dev1');

console.log(dev.html('hello world!

'));

dev.on('click',function())

3、描述new乙個物件的過程

(1)建立乙個新物件

(2)this指向這個新物件

(3)執行**,即對this進行賦值

(4)返回this

//建立建構函式

function foo(name,age);

this.name=name;

// return this;

}foo.prototype.alertname=function()

//建立示例

var f=new foo('zahngshan');

f.printname=function();

//測試

f.printname();

f.alertname();

4、zepto(或其他框架)原始碼中如何使用原型鏈

(1)閱讀原始碼是高效提高技能的方式

(2)但不能『埋頭苦鑽』有技巧在其中

(3)慕課網搜尋『zepto設計和原始碼分析』

二、知識點

1、建構函式

建構函式有個特點,函式名首字母大寫,建構函式就類似於乙個模板,可以new出來多個例項

2、建構函式-擴充套件

(1)var a={}其實是var a=new object()的語法糖

(2)var a=其實是var a=new array()的語法糖

(3)function foo(){}其實是var foo=new function(...)

(4)使用instanceof判斷乙個函式是否是乙個變數的建構函式

3、原型規則和示例

(1)所有的引用型別(陣列,物件,函式),都具有物件特徵,即自由擴充套件屬性(除了null以外),如下**所示,都可以自由擴充套件屬性a

var obj = {};

obj.a = 100;

var arr = ;

arr.a = 100;

function fn() ;

var f1=new fn();

fn.a = 100;

(2)所有的引用型別(陣列,物件,函式),都有乙個__proto__屬性,屬性值是乙個普通的物件,如下**所示:

var obj = {};

obj.a = 100;

var arr = ;

arr.a = 100;

function fn() ;

var f1=new fn();

fn.a = 100;

console.log(obj.__proto__);

console.log(arr.__proto__);

console.log(fn.__proto__);

(3)所有的函式,都有乙個prototype屬性,屬性值也是乙個普通的物件

function fn() ;

var f1=new fn();

fn.a = 100;

console.log(fn.__proto__);

console.log(fn.prototype);

(4)所有的引用型別(陣列,物件,函式),__proto__屬性值指向他的建構函式的「prototype」屬性值

var obj = {};

obj.a = 100;

var arr = ;

arr.a = 100;

function fn() ;

var f1=new fn();

fn.a = 100;

console.log(obj.__proto__);

console.log(arr.__proto__);

console.log(fn.__proto__);

console.log(fn.prototype);

console.log(obj.__proto__ === object.prototype);//true

console.log(fn.__proto__ === fn.prototype);//true

(5)當試圖得到乙個物件的某個屬性時,如果這個物件本身沒有這個屬性,那麼會去它的__proto__(即它的建構函式的prototype)中尋找,即console.log(obj.__proto__ === object.prototype);

4、原型鏈

5、迴圈物件自身屬性

var item;

for(item in f)

}

5、instanceof

用於判斷引用型別屬於哪個建構函式的方法

javascript 回顧(一些面試題)

輸入url到得到html的詳細過程,載入乙個資源的過程?瀏覽器根據dns伺服器得到網域名稱的ip位址 像這個ip的機器傳送http請求 伺服器收到 並返回http請求 瀏覽器得到資料 瀏覽器渲染頁面的過程?根據html結構生成dom tree 根據css生成cssom 講dom和cssom整合成re...

5個面試題

面試者1 1 寫乙個int型的stack類 2 兩個有序鍊錶merge成乙個鍊錶 3 判斷兩個字串是否相等。abc,bac,return true 面試者2 每輪一道,第一輪英文自我介紹加演算法,第二輪時間比較短就演算法,第三輪是專案介紹加演算法 面試者3 寫乙個函式,逆序乙個陣列 寫乙個函式,將整...

javascript閉包經典面試題

首先第一行,先看 var a fun 0 把0傳入 fun n,o 中,那麼 n 0,o undifine,而 fun n,o return 了 所以a就等於 所以a.fun 1 function 1 fun 1,0 所以會輸出0,同樣a.fun 2 function 2 fun 2,0 輸出0,以...