分析以下代码添加每段代码的注释及用es6优化function Class Classprototypeconstruct = function ;Classextend = functiondef var classDef = function if arguments0 !== Class thisconstructapplythis arguments; ;
//定义一个Class构造函数 function Class() { }
//给Class原型链上添加一个construct方法 Class.prototype.construct = function() {};
//给Class添加一个extend方法,用于创建子类 Class.extend = function(def) { //定义一个新的子类构造函数 var classDef = function() { //如果传入的第一个参数不是Class,则调用该子类的construct方法 if (arguments[0] !== Class) { this.construct.apply(this, arguments); } };
//创建一个新的原型对象,将原型链指向父类Class的原型对象
var proto = new this(Class);
//获取父类Class的原型对象
var superClass = this.prototype;
//遍历子类定义对象def,将其中的方法和属性添加到子类的原型对象上
for (var n in def) {
var item = def[n];
if (item instanceof Function) item.$ = superClass;
proto[n] = item;
}
//将新的原型对象赋给子类构造函数的原型链
classDef.prototype = proto;
//赋给这个新的子类同样的静态extend方法
classDef.extend = this.extend;
return classDef;
};
//使用es6语法优化 class Class { //构造函数 constructor() { } //construct方法 construct() { } //extend方法,用于创建子类 static extend(def) { //定义一个新的子类构造函数 let classDef = class { //构造函数 constructor() { //如果传入的第一个参数不是Class,则调用该子类的construct方法 if (arguments[0] !== Class) { this.construct.apply(this, arguments); } } }; //创建一个新的原型对象,将原型链指向父类Class的原型对象 let proto = new this(Class); //获取父类Class的原型对象 let superClass = this.prototype; //遍历子类定义对象def,将其中的方法和属性添加到子类的原型对象上 for (let n in def) { let item = def[n]; if (item instanceof Function) { item.$ = superClass; } proto[n] = item; } //将新的原型对象赋给子类构造函数的原型链 classDef.prototype = proto; //赋给这个新的子类同样的静态extend方法 classDef.extend = this.extend; return classDef; }
原文地址: https://www.cveoy.top/t/topic/fivz 著作权归作者所有。请勿转载和采集!