js模拟类的继承
var object = { //定义object基本类,用于实现最基础的方法和属性
isA: function(type){
var self = this;
while(self){
if(self == type){
return true;
}
self = self.Type;
};
return false;
},
name: ‘object‘
}
function Class(baseClass, defineClass){ //创建类的函数,用于声明类及继承的关系
function _class(){ //创建类的临时函数壳
this.Type = baseClass; //给每个类约定一个Type属性,引用其继承的类
for(var member in defineClass){
this[member] = defineClass[member]; //复制类的全部成员到当前定义的类
}
}
_class.prototype = baseClass;
return new _class();
}
function NEW(Class, param){ //创建对象的函数,用于任意类的对象创建
function _new(){ //创建对象的临时函数壳
this.Type = Class; //给每个对象约定一个Type属性,可以访问到该对象所属的类
if(Class.create){
Class.create.apply(this, param); //约定每个类的构造函数都叫create
}
}
_new.prototype = Class;
return new _new();
}
var person = Class(object, { //person类从object类继承并添加自己的属性和方法
create: function(name, age){
this.name = name;
this.age = age;
},
sayName: function(){
console.log(this.name);
},
sayAge: function(){
console.log(this.age);
}
});
var employee = Class(person, { //employee类从person类继承并添加自己的属性和方法
create: function(name, age, sex){
person.create.call(this, name, age);
this.sex = sex;
},
saySex: function(){
console.log(this.sex);
}
})
var man1 = NEW(person, [‘ly‘, 12]);
var man2 = NEW(employee, [‘wade‘, 12, ‘男‘]);
man1.sayName(); //ly
man2.sayName(); //wade
man2.saySex(); //男
console.log(person.isA(employee)) //false
console.log(employee.isA(person)) //true
function createClass(baseClass, defineClass){
function _createClass(){
for(member in defineClass){
this[member] = defineClass[member];
}
}
_createClass.prototype = baseClass;
return new _createClass();
}
function NEW(aClass, parame){
function _NEW(){
aClass.create.apply(this, parame);
}
_NEW.prototype = aClass;
return new _NEW();
}
var animal = createClass(Object, {
create: function(type){
this.type = type;
},
whoI: function(){
console.log(this.type);
}
});
var bird = createClass(animal, {
create: function(type, name, age){
animal.create.call(this, type);
this.name = name;
this.age = age;
},
isFly: function(){
console.log("I‘m flying");
},
sayAge: function(){
console.log(this.age);
},
sayName: function(){
console.log(this.name);
}
})
var bird1 =NEW(bird, [‘鸟‘,‘老鹰‘,12]);
console.log(bird1);
bird1.sayName();
bird1.sayAge();
bird1.isFly();
bird1.whoI();
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。