ES6部分原始碼重寫 1(ES5 建構函式解析)

2021-09-19 10:23:12 字數 2270 閱讀 7995

建立乙個飛機的物件

該物件具有以下屬性和方法

plane.prototype.

fly=

function()

function

plane()

//建立乙個飛機的物件

var plane =

newplane

("夢想號"

);

此時,因為軍事實力的提公升,我們的需求發生改變,需要生產具有攻擊能力的戰鬥機

所以,我們在建立乙個攻擊機的構造工廠

因為後來生產的飛機是在已有工廠的前提下生產的,所以採用繼承的方式來創造戰鬥機

此時飛機具有的功能有

function

attackplane()

繼承原型上的方法有很多種,如下(此處使用父類和子類代替飛機的關係)

直接將父類的原型賦值給子類的原型

attackplane.prototype = plane.prototype;

attackplane.prototype.

attack

=function()

function

attackplane()

var plane1 =

newplane()

;

控制台看效果

所以採用此種方法繼承會導致父類多出不需要的方法

2.將父類的物件new乙個例項賦予子類的原型

採用new plane的方式會導致子類的原型上會將父類的私有屬性繼承下來,所以也不合適

使用中間變數的方式

此種方式也沒有避免子類的方法順著原型鏈傳到父類的身上

4.採用

//這種方法寫起來比較複雜,沒有相容性問題

attackplan.prototype = object.

create

(plan.prototype,

)//老版本瀏覽器會有相容性問題,有時需要左相容性處理,採用最多

attackplan.prototype = object.

setprototypeof

(attackplan.prototype, plan.prototype)

;//最粗暴的方法,大佬的做法

attackplan.prototype.__proto__ = plan.prototype;

attackplane.prototype.

attack

=function()

attackplane.prototype.

attack

=function()

function

attackplane()

var plane1 =

newplane()

;

這三種情況下,都能避免子類的的方法汙染父類的方法

也不會使父類的私有變數跑到子類的原型上去

ES6部分語法

1 當物件的key和value名稱一致時,可以縮寫成乙個。components 等同於 components 2 data 等同於data function data 等同於 data function 3 是箭頭函式 render function h 也等同於 render h 4 在es6語法...

ES6部分特性小結

es6之前宣告變數只能用var,var的特點是無論宣告在何處,都會被視為宣告在函式的最頂部 不在函式內即在全域性作用域的最頂部 function test else console.log name 此處訪問值為undefined 可以看到雖然列印結果是undefined,但是並沒有報錯。那是因為被...

ES6部分新特性總結

1.不存在變數提公升 使用var宣告 console.log a undefined var a 1 使用let宣告 console.log b let b 2 報錯 2.只在當前作用域有效 for var i 0 i 4 i i 4 for let n 0 n 4 n n 報錯 3.暫時性死區 如...