js面試題 js的繼承

2021-07-03 20:45:26 字數 1420 閱讀 7115

js是門靈活的語言,實現一種功能往往有多種做法,ecmascript沒有明確的繼承機制,而是通過模仿實現的,根據js語言的本身的特性,js實現繼承有以下通用的幾種方式

1.使用物件冒充實現繼承(該種實現方式可以實現多繼承)

實現原理:讓父類的建構函式成為子類的方法,然後呼叫該子類的方法,通過this關鍵字給所有的屬性和方法賦值

js**  

function parent(firstname)  

}  function child(firstname)  

}  var mychild=new  child("李");  

mychild.saysomething();  

2.採用call方法改變函式上下文實現繼承(該種方式不能繼承原型鏈,若想繼承原型鏈,則採用5混合模式)

實現原理:改變函式內部的函式上下文this,使它指向傳入函式的具體物件

js**  

function parent(firstname)  

}  function child(firstname)  

this.getname=function()  

}  var child=new child("張");  

parent.call(child,child.getname());  

child.saysomething();  

js**  

function parent(firstname)  

}  function child(firstname)  

this.getname=function()  

}  var child=new child("張");  

child.saysomething();  

4.採用原型鏈的方式實現繼承

實現原理:使子類原型物件指向父類的例項以實現繼承,即重寫類的原型,弊端是不能直接實現多繼承

js**  

function parent()  

}  function child(firstname)  

}  child.prototype=new  parent();  

var child=new child("張");  

child.saysomething();  

5.採用混合模式實現繼承

js**  

function parent()  

}  parent.prototype.sayparent=function()  

function child(firstname)  

}  child.prototype=new  parent();  

var child=new child("張");  

child.saysomething();  

child.sayparent();  

經典面試題 js繼承方式上

js不是傳統的物件導向語言,那麼他是怎麼實現繼承的呢?由於js是基於原型鏈實現的物件導向,所以js主要通過原型鏈查詢來實現繼承,主要有兩大類實現方式,分為基於建構函式的繼承,以及非建構函式的繼承。由於篇幅較長,所以把文章分為上下篇,今天先講解上半部分。現在有兩個類即建構函式,乙個是動物類 funct...

js變數面試題

全域性作用域和區域性作用域 全域性作用域 整個js執行環境 區域性作用域 通過建立乙個函式就開闢出了乙個區域性作用域 全域性變數和 區域性變數 全域性變數 在全域性作用域都可以訪問的變數 區域性變數 只能在當前區域性作用域訪問的 變數宣告提公升 如果變數宣告在函式裡面,則將變數宣告提公升到函式的開頭...

前端JS面試題

在引數過多的時候,call 的效能會好一些 console.time 可以測試一段程式執行的時間 console.timeend 假設 arr 是乙個陣列,它之所以可以呼叫 arr.push 這個方法式因為 它是array的例項,可以繼續呼叫array原型上面的 push 方法 function f...