javascript,继承,封装
var object = //定义小写的object基本类,用于实现最基础的方法等
{
isA: function(aType) //一个判断类与类之间以及对象与类之间关系的基础方法
{
var self = this;
while(self)
{
if (self == aType)
return true;
self = self.Type;
};
return false;
}
};
function Class(aBaseClass, aClassDefine) //创建类的函数,用于声明类及继承关系
{
function class_() //创建类的临时函数壳
{
this.Type = aBaseClass; //我们给每一个类约定一个Type属性,引用其继承的类
for(var member in aClassDefine)
this[member] = aClassDefine[member]; //复制类的全部定义到当前创建的类
};
class_.prototype = aBaseClass;
return new class_();
};
function New(aClass, aParams) //创建对象的函数,用于任意类的对象创建
{
function new_() //创建对象的临时函数壳
{
this.Type = aClass; //我们也给每一个对象约定一个Type属性,据此可以访问到对象所属的类
if (aClass.Create)
aClass.Create.apply(this, aParams); //我们约定所有类的构造函数都叫Create,这和DELPHI比较相似
};
new_.prototype = aClass;
return new new_();
};
//语法甘露的应用效果:
var Person = Class(object, //派生至object基本类
{
Create: function(name, age)
{
this.name = name;
this.age = age;
},
SayHello: function()
{
alert("Hello, I'm " + this.name + ", " + this.age + " years old.");
}
});
var Employee = Class(Person, //派生至Person类,是不是和一般对象语言很相似?
{
Create: function(name, age, salary)
{
Person.Create.call(this, name, age); //调用基类的构造函数
this.salary = salary;
},
ShowMeTheMoney: function()
{
alert(this.name + " $" + this.salary);
}
});
var BillGates = New(Person, ["Bill Gates", 53]);
var SteveJobs = New(Employee, ["Steve Jobs", 53, 1234]);
BillGates.SayHello();
SteveJobs.SayHello();
SteveJobs.ShowMeTheMoney();
var LittleBill = New(BillGates.Type, ["Little Bill", 6]); //根据BillGate的类型创建LittleBill
LittleBill.SayHello();
alert(BillGates.isA(Person)); //true
alert(BillGates.isA(Employee)); //false
alert(SteveJobs.isA(Person)); //true
alert(Person.isA(Employee)); //false
alert(Employee.isA(Person)); //true
转载于:https://blog.51cto.com/taoshi/1176278
javascript,继承,封装相关推荐
- JavaScript 继承 封装 多态实现及原理详解
封装 就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了 ...
- 面向对象的 JavaScript:封装、继承与多态
本文作者:家园工作室研发组成员 @维尔希宁 本文出处: 面向对象的 JavaScript:封装.继承与多态blog.lenconda.top 本文遵循署名-非商业性使用-禁止演绎3.0 未本地化版本 ...
- Javascript继承机制的设计思想
我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...
- 探寻完美 之 JavaScript继承
本文并不想探讨JavaScript的面向对象特性(如果有兴趣,可参看我的<领悟面向对象JavaScript>),也不会涉及全部的面向对象概念,只是试图寻找一个还未被任何人发现的" ...
- 【JavaScript】重温Javascript继承机制
上段时间,团队内部有过好几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了些口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java和Javascript是雷锋和雷峰塔的关系.Ja ...
- [转]JavaScript继承详解
原文地址:http://www.cnblogs.com/sanshi/archive/2009/07/08/1519036.html 面向对象与基于对象 几乎每个开发人员都有面向对象语言(比如C++. ...
- 重温Javascript继承机制
上段时间,团队内部有过好几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了些口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java和Javascript是雷锋和雷峰塔的关系.Ja ...
- JavaScript继承详解(四)
文章截图 - 更好的排版 在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript. C ...
- JavaScript继承详解(四) 转
在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript. Crockford是Java ...
最新文章
- python自带的库有哪些_python常用的内置库
- openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案...
- 广度优先搜索求解迷宫问题
- IE JS关闭窗口不提示的方法
- 天津农学院计算机考研专业,2021年天津农学院计算机与信息工程学院考研专业目录_研究生考试范围 - 学途吧...
- 关于 awesome-algorithm 仓库中 Python Leetcode 代码删除一事
- onpostexecute 中更新adapter 事变_Mac音频转换器----Adapter
- [转]博士的学习经验!读后,令人茅塞顿开的科研经典之作
- 04-AskDoctorForHelp-向医生寻求帮助
- 修改 docker容器hosts文件
- iir滤波器c语言程序,请教C语言做iir滤波器问题
- 10个3d立体字ps金属字图层样式下载
- AutoPatchnbsp;warning:zfaprod.txtnbsp;do…
- CSS3鼠标悬停图片360度旋转效果
- 中国农业大学821数据结构计算机考研
- 【游戏逆向】老飞飞怀恋魅力爱玩等老飞飞瞬移分析代码
- 心电图心电轴怎么计算_心电图心电轴计算表
- Habor镜像仓库的搭建
- 计算机工作自动化的特点,计算机内部自动化操作等特点.doc
- 网络流量 pv、uv、ip 各代表的含义
热门文章
- 复数特征值求特征向量_深刻地认识特征值
- 英文句子改写在线软件_试完这些英文论文写作辅助神器,你会发现新大陆der~...
- python花萼长度表_Python 数据分析答疑 5:Pandas入门
- Maltego更新到4.1.6
- OSNIT信息收集分析框架OSRFramework
- 反汇编引擎Capstone
- 计算机四级分数怎么查,计算机三四级成绩查询正确打开方式
- iOS 数据计算带小数点导致数据不精确问题
- android碎片功能实现,Android 列表碎片
- java中bufferendwriter_Java IO系列(三)Writer