1 象使用java类一样使用javscript类,javascript 类机制实现源码
习惯了使用java, 转入到javascript后, 一直苦恼为什么不能象java那样建立类及其对象呢。
尝试了很多方式, 最近在网上看到一段代码, 才发现原来在js中可以如此简单高效的实行类机制。
也打消了我对javascript类机制会特别消耗性能的顾虑,让我放心的使用javascript类机制。
代码比较短,只用了js的基本特性。参考价值比较高,在这里show一下代码。
实现类机制代码如下:
javascript代码
(function(){
var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
// The base Class implementation (does nothing)
this.Class = function(){};
// Create a new Class that inherits from this class
Class.extend = function(prop) {
var _super = this.prototype;
// Instantiate a base class (but only create the instance,
// don't run the init constructor)
initializing = true;
var prototype = new this();
initializing = false;
// Copy the properties over onto the new prototype
for (var name in prop) {
// Check if we're overwriting an existing function
prototype[name] = typeof prop[name] == "function" &&
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
(function(name, fn){
return function() {
var tmp = this._super;
// Add a new ._super() method that is the same method
// but on the super-class
this._super = _super[name];
// The method only need to be bound temporarily, so we
// remove it when we're done executing
var ret = fn.apply(this, arguments);
this._super = tmp;
return ret;
};
})(name, prop[name]) :
prop[name];
}
// The dummy class constructor
function Class() {
// All construction is actually done in the init method
if ( !initializing && this.init )
this.init.apply(this, arguments);
}
// Populate our constructed prototype object
Class.prototype = prototype;
// Enforce the constructor to be what we expect
Class.prototype.constructor = Class;
// And make this class extendable
Class.extend = arguments.callee;
return Class;
};
})();
测试代码如下:
javascript代码
var Person = Class.extend({
init: function(isDancing){
this.dancing = isDancing;
},
dance: function(){
return this.dancing;
}
});
var Ninja = Person.extend({
init: function(){
this._super( false );
},
dance: function(){
// Call the inherited version of dance()
return this._super();
},
swingSword: function(){
return true;
}
});
var p = new Person(true);
p.dance(); // => true
var n = new Ninja();
n.dance(); // => false
n.swingSword(); // => true
// Should all be true
p instanceof Person && p instanceof Class &&
n instanceof Ninja && n instanceof Person && n instanceof Class
分享到:
相关推荐
在本项目中,我们将探讨如何使用HTML、CSS、MySQL和PHP技术快速构建一个动态的博客网站。这四个组件是Web开发中的基础,它们共同协作,为用户提供交互式、数据驱动的网页体验。以下是对每个部分的详细说明: 1. ...
少儿编程scratch项目源代码文件案例素材-我的世界 3D模型.zip
少儿编程scratch项目源代码文件案例素材-影子.zip
内容概要:本文详细介绍了基于运动学模型的模型预测控制(MPC)轨迹跟踪算法的纯Matlab实现方法。首先定义了差速驱动机器人的运动学模型,然后通过构建优化问题并利用fmincon函数求解最优控制输入。文中还讨论了代价函数的设计,包括状态误差和控制量的变化率惩罚项,以及如何生成参考轨迹进行仿真测试。最后给出了常见的仿真问题及其解决方案,并展示了如何通过可视化工具评估跟踪效果。 适合人群:对移动机器人控制感兴趣的科研人员、研究生及具有一定Matlab编程基础的工程师。 使用场景及目标:适用于需要理解和实现基于运动学模型的MPC轨迹跟踪算法的研究项目或工程应用。目标是掌握MPC的基本原理及其在Matlab环境下的具体实现步骤,能够独立完成从建模到仿真的全过程。 其他说明:本文不仅提供了完整的代码实现,还深入浅出地解释了每个关键环节背后的理论依据和技术细节,帮助读者更好地理解MPC的工作机制。同时,文中提到的一些技巧如控制量变化率惩罚项的应用,对于提高算法性能具有重要指导意义。
少儿编程scratch项目源代码文件案例素材-小鸟冒险.zip
scratch少儿编程逻辑思维游戏源码-经典游戏.zip
少儿编程scratch项目源代码文件案例素材-烟花效果.zip
房地产 -前策标准化-沪浙一部.pptx
内容概要:本文探讨了利用格子玻尔兹曼方法(LBM)和多松弛时间(MRT)模型对高密度比条件下气泡溃灭现象进行建模的方法。文中详细介绍了MRT碰撞模型相较于传统的单松弛时间(SRT)模型的优势,特别是在处理大密度比情况下的稳定性提升。此外,还讨论了通过调整伪势模型中的参数C和G来精确控制表面张力的技术细节,以及采用改进的颜色函数法进行界面捕捉以避免虚假速度问题的具体做法。最后强调了实际应用中需要通过大量参数扫描实验来优化模型性能。 适合人群:从事流体力学仿真研究的专业人士,尤其是关注气泡动力学及其相关应用领域的研究人员。 使用场景及目标:适用于需要模拟复杂流体环境中气泡行为的研究项目,旨在提高数值仿真的精度和可靠性,特别是对于涉及极端条件(如极高密度比)的情况。 其他说明:作者提醒读者不要盲目相信文献中的固定参数设置,而应该根据具体情况进行充分的实验验证。
scratch少儿编程逻辑思维游戏源码-废料.zip
少儿编程scratch项目源代码文件案例素材-有趣的小鸟.zip
少儿编程scratch项目源代码文件案例素材-跳舞的线.zip
scratch少儿编程逻辑思维游戏源码-火柴人战争.zip
scratch少儿编程逻辑思维游戏源码-跟着它滚.zip
scratch少儿编程逻辑思维游戏源码-巨龙超级英雄菲尔伯特.zip
南京证券-低轨卫星互联网启动,天地一体通信迈向6G
scratch少儿编程逻辑思维游戏源码-搁浅大冒险.zip
scratch少儿编程逻辑思维游戏源码-疯狂堆塔.zip
内容概要:本文详细介绍了基于PLC(可编程逻辑控制器)的教室灯控制系统的设计与实现。首先,在电气设计部分,涵盖了电路设计、电源选择和灯具选型,确保了系统的安全性和稳定性,并选择了高效节能的LED灯具。其次,在程序设计部分,重点讲述了PLC程序的编写和调试,实现了灯光的开关、调光和定时功能,保障了系统的稳定性和可靠性。最后,在组态设计部分,通过选择合适的组态软件(如WinCC、组态王),进行了系统的配置和实时监控,使用户可以方便地操作和管理控制系统。 适合人群:从事电气工程、自动化控制领域的技术人员,特别是关注节能环保和智能照明解决方案的专业人士。 使用场景及目标:适用于需要提升教室照明智能化水平并实现节能减排的学校和其他教育机构。目标是通过优化照明系统,改善教学环境,降低能源消耗。 其他说明:本文不仅提供了理论指导,还包含了具体实施步骤和技术细节,有助于读者全面理解和应用PLC技术于实际项目中。
少儿编程scratch项目源代码文件案例素材-武士格斗游戏.zip