var object = { //定義object基本類,用於實現最基礎的方法和屬性app
isA: function(type){函數
var self = this;this
while(self){prototype
if(self == type){對象
return true;繼承
}io
self = self.Type;console
};function
return false;class
},
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();