潛入理解ES6 類和繼承

2021-09-11 12:48:54 字數 2840 閱讀 9364

在es5宣告乙個函式(可以new),再將方法新增到這個方法的原型上,來建立自定義型別。

function

person(name)

person.prototype.sayname = function() ;

let person = new person("xunuo0x");

person.sayname(); // 輸出 "xunuo0x"

console.log(person instanceof person); // true

console.log(person instanceof

object); // true

複製**

本質:es5實現方式的語法糖

我們拿下面用class宣告的person為例:也就是說person類為乙個具有建構函式行為的函式,其中內部方法sayname實際上就是person.prototype.sayname()。所以說本質上是es5實現方式的語法糖。

console.log(typeof person) // 'function'

複製**

區別在於,類的屬性不可重新賦值和不可列舉的,person.prototype就是乙個唯讀屬性。

宣告:

class

person

// 更加簡單的宣告類的內部函式

// 等價於 person.prototype.sayname

sayname()

}let person = new person("xunuo0x");

person.sayname(); // 輸出 "xunuo0x"

console.log(person instanceof person); // true

console.log(person instanceof

object); // true

console.log(typeof person); // "function"

console.log(typeof person.prototype.sayname); // "function"

複製**

用es5重寫如下:在實現的時候,主要使用object.defineproperty()實現class內部函式

// 直接等價於 person

let person2 = (function()

this.name = name;

}object.defineproperty(person2.prototype, "sayname",

console.log(this.name);

},// **類的內部方法定義為不可列舉**

enumerable: false,

writable: true,

configurable: true

});return person2;

}());

複製**

js中能當作值來使用的稱為一級公民

用法:

// 類名作為引數傳入函式

function

crateobj (classname)

// 立即執行,實現單例模式

let person = new

class

say ()

}('xunuo0x')

person.say() // "xunuo0x"

複製**

只要乙個表示式能返回具有[[constructor]]就可以使用extends繼承;也就是說可以繼承乙個函式

es5中的繼承

function

parent (name)

parent.prototype.sayname = function ()

function

child (name)

child.prototype = object.create(parent.prototype)

child.prototype.constructor = child

複製**

在es6中的繼承

class

parent (name)

sayname()

}class

child

extends

parent (name)

// 重寫父類中的方法

sayname () `)

}}複製**

class

myclass

extends

array

constructor(value)

}複製**

function

mixin (...mixin)

object.assign(base, ...mixin)

return mixin

}class

person

extends

mixin(animal, monkey)

}複製**

ES6 類和繼承

class person 等價於 person.prototype.showname showname let p1 new person aaaa 12 表示式形式 const person class let p1 new person aaaa 12 變數定義方法名 let aaa ssss ...

深入理解ES6 解構

解構時一種打破資料結構,將其拆分為更小部分的過程。解構在實際開發中經常會應用到物件和陣列中。關於解構的基本用法,請參考 es6 變數的宣告及解構賦值 const node let node 對已經宣告的變數賦值 const node let a,b node const obj let obj co...

es6 類的繼承

function animal name animal.prototype.drink function animal.prototype.eat function item function dog name,breed animal.prototype dog.prototype animal....