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();

时间: 2024-10-11 19:27:50

js模拟类的继承的相关文章

js模拟类的创建以及继承

<html> <body> <script>    //js模拟类的创建以及继承        //第一步:创建父类        function Parent(name){            this.name = name;        }        //给父类添加属性方法        Parent.prototype.age = 18;        //var p1 = new Parent();    //第二步:创建子类            

js模拟类

ECMAScript6已经支持了class,但之前版本都不支持类,但是可以通过一些方法来模拟类. js中的类,既是重点,也是难点,很多时候都感觉模棱两可. 首先强调一下js中很重要的3个知识点:this.prototype.constructor. 下面我们来总结一下定义(模拟)类的几种方法: 1.工厂模式 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function createObject(name,age){   var obj = new Objec

【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是一项庞大复杂的工程,如果没有面向对象功能势必会为开发带来一定的不便.不过幸好Lua中有table这样强大的数据结构,利用它再结合元表(metatable),我们便可以很方便地在Lua中模拟出类.继承和多态等面向对象编程具有的特性. 二.前提知识 按照惯例,我们还是先来熟悉一下必要的前提知识,以便方便

JS模拟类继承

//最后一个参数是JSON表示的类定义 //如果参数大于一,则第一个参数是基类,否则,基类是object //中间的参数是类实现的接口 //返回值是类,类是一个构造函数,并继承了基类的prototype function Class(){ aDefine = arguments[arguments.length - 1]; //传入的最后一个参数是要定义的类 if(!aDefine) return; //如果没用传参数,则直接结束. var aBase = arguments.length>1?

js 创建类和继承的几种方法

在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法.JavaScript语言里是没有类的概念的,但是我们通过以下方法也可以模拟出类. 一.创建类: 1. 利用function关键字: function Animal(name,age){ this.name=name; this.age = age; this.getName = function(){ return this.name; } this.setName = f

JavaScript 高级篇之闭包、模拟类,继承(五)

本篇主要分享我对闭包的理解及使用闭包完成私有属性.模拟类.继承等,结合大量例子,希望大家能快速掌握!首先让我们先从一些基本的术语开始吧 一.javascript中的闭包 1.我们一起先来理解什么是函数的作用域. 2.调用的对象 结合例子: 复制代码 代码如下: function display(something) { function executeDisplay1() { document.write("我在帮老板打印:"+something+"<br />&

javascript“类”与继承总结和回顾-韩烨

Javascipt语法不支持"类"(class)[es6已经支持],但是有模拟类的方法.今天我主要谈谈Javascipt中模拟"类"的方法及js中继承的总结和回顾. js中实现"类"与继承,既是重点,又是难点.很多同学可能都对js中"类"与继承都有所了解,但是深入剖析的时候,感觉力不从心.模棱两可. 下面我们一起来总结一下,巩固提高一下js的基础知识.关于js的基础知识,我在之前写过一个关于js老生常谈之this,constr

JS原型继承和类式继承

类式继承(构造函数) JS中其实是没有类的概念的,所谓的类也是模拟出来的.特别是当我们是用new 关键字的时候,就使得"类"的概念就越像其他语言中的类了.类式继承是在函数对象内调用父类的构造函数,使得自身获得父类的方法和属性.call和apply方法为类式继承提供了支持.通过改变this的作用环境,使得子类本身具有父类的各种属性. JavaScript var father = function() { this.age = 52; this.say = function() { al

JS面向对象组件 -- 继承的其他方式(类式继承、原型继承)

继承的其他形式: •类式继承:利用构造函数(类)继承的方式 •原型继承:借助原型来实现对象继承对象 类 : JS是没有类的概念的 , 把JS中的构造函数看做的类 要做属性和方法继承的时候,要分开继承. function Aaa(){ //父类 this.name = "小明"; } Aaa.prototype.showName = function(){ alert( this.name ); }; function Bbb(){ //子类 } Bbb.prototype = new