在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"
複製**
只要乙個表示式能返回具有es5中的繼承[[constructor]]
就可以使用extends
繼承;也就是說可以繼承乙個函式
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....