javascript继续
媒介
javascript作为一门轻量级的脚本语言在ES6和node.js的横空出世以后将其推向的新的高度,虽然 ES6 中涌现的新的天生对象的类语法花样,但依旧为ES5的语法糖,而我们依旧有必要从javascript的原生完成入手来相识它的继续完成体式格局,ES6给出了越发简约的牢固的类声明体式格局,有兴致的能够检察阮一峰的ES6入门,下面给出原文链接
javascript的继续差别的开发者有差别的明白体式格局,笔者以为重要分为四种
- 原型链继续
- 对象假装继续(组织函数继续 不过我不喜欢这个名字)
- 组合继续
- 寄生组合继续
关于继续,能够预先声明一个Animal, 进而议论差别的继续体式格局.
let Animal = (function () {
function Animal (name) {
this.name = name || 'Animal';
this.sleep = function(){
console.log(this.name + '正在睡觉!');
}
}
Animal.prototype.eat = function(food) {
console.log(this.name + '正在吃:' + food);
}
return Animal;
})()
原型链继续
let Cat = (function () { function Cat(){ } Cat.prototype = new Animal(); Cat.prototype.name = 'cat'; return Cat; })()
原型链是 javascript 的典范继续体式格局, 这类继续体式格局的最大特性就是同享,一切事例同享原型对象中的一切属性和要领, 同享是它的最大长处 也是它的最大瑕玷, 正对我们的差别需求, 比方大多数情况下我们经常须要某些属性是子类特有的 而一些读取属性要领须要同享,--别的此种继续没法向父类传参,没法完成多继续
对象假装继续
let Cat = (function () { function Cat(name){ Animal.call(this,name); } return Cat; })()
对象假装继续就是简朴的应用call或许apply要领完成继续,这类继续最大的特性恰好与原型链继续相反不能继续原型属性/要领--非同享(子类自有一份), 一样这是它的长处也是它的瑕玷, 别的它处理了原型链继续中没法向父类传参的瑕玷, 而且能够完成某种意义上的多继续--(注重这类多继续是打引号的)
组合继续
let Cat = (function () { function Cat(name){ Animal.call(this, name); } Cat.prototype = new Animal(); Cat.prototype.constructor = Cat; return Cat; })()
组合继续是比较好的继续, 他是原型链继续和对象假装继续的合体, 合理的应用了这两种组合的特性(是特性不是长处^_^),既是子类的实例,也是父类的实例, 但有一个瑕玷就是调用了两次父类组织函数,天生了两份实例(子类实例将子类原型上的那份屏障了)形成内存糟蹋. 这也是用的最多的一种
寄生组合继续
let Cat = (function () { function Cat(name){ Animal.call(this, name); } (function(sub, sup){ var Super = function(){}; Super.prototype = sup.prototype; sub.prototype = new Super(); sub.prototype.constructor = sub })(Cat, Animal) return Cat; })()
寄生组合继续是对组合继续的基础上的升华, 个人以为是可谓圆满的继续体式格局,革新的组合继续内存糟蹋的题目^_^