JavaScript的面向对象方法以及差别


Posted in Javascript onMarch 31, 2008

第一种:使用this关键字

function Class1()
{
    this.onclick = function(e)
    {
        for (var i=0; i < 1000; i++)
        {
            var a = new Date();
        }
    } 

使用this.的方法可以很灵活地给对象添加属性和方法,而且和大部分的OOP语言都相似,甚至在运行中都可以添加。

第二种:使用prototype关键字

function clickFunc(e)
{
    for (var i=0; i < 1000; i++)
    {
        var a = new Date();
    }

function Class2()

Class2.prototype.onclick = clickFunc; 

这种用法上来讲就没有第一种显得灵活。不过在一个对象new出来之前,也是一样可以随时添加一个对象的属性和方法。

可是他们并不是相等的,相对来说,我更喜欢第一种,因为第一种方法相对比较集中,比较容易阅读代码。但是在运行的时候,他们运行的效率却差别相当地大。以下让我们看一下测试代码吧:

var total = new Array(); 

function Test1()
{
    var a = new Date();
    for (var i=0; i < 10000; i++)
    {
        var c = new Class1();
        //total.push(c);
    }
    var b = new Date();
    alert(b.getTime()-a.getTime());

function Test2()
{
    var a = new Date();
    for (var i=0; i < 10000; i++)
    {
        var c = new Class2();
        //total.push(c);
    }
    var b = new Date();
    alert(b.getTime()-a.getTime());

第一步作执行时间的测试:发现Test1()需要142ms,而Test2()仅需50ms.发现时间效率上来说,prototype的方法相对this来说,更加高效。 

第二步作内存占用的测试,把total.push(c);这行的注释去掉,之所以要把它们加入到数组里面去,防止创建的时候,对象比较多的时候,没有被引用的对象被GC了。结果发现差距不是一般的大,第一种方法要占用二三十M的内存,而第二种只需要一百多K。

成因推断:
在处理这两种代码的时候,第一种,JS的解析器,给每个对象都创建一个单独的方法,这样增加了内存的开销,同时创建方法的时候,增加了运行时间。第二种,JS的解析器和大部分的OOP编译器一样的,把对象的数据段和方法段分开存储了,对于对象的私有数据,则是每个对象一份,而这些方法,则是放在公共的方法段里,所以可以减少运行时间和内存的开销。

Javascript 相关文章推荐
js loading加载效果实现代码
Nov 24 Javascript
JS打开新窗口的2种方式
Apr 18 Javascript
JavaScript的作用域和块级作用域概念理解
Sep 21 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
Aug 17 Javascript
完美实现bootstrap分页查询
Dec 09 Javascript
js倒计时简单实现方法
Dec 17 Javascript
JavaScript类型系统之布尔Boolean类型详解
Jun 26 Javascript
详解Vue.js分发之作用域槽
Jun 13 Javascript
VsCode插件整理(小结)
Sep 14 Javascript
微信小程序App生命周期详解
Jan 31 Javascript
详解nuxt sass全局变量(公共scss解决方案)
Jun 27 Javascript
原生JS实现记忆翻牌游戏
Jul 31 Javascript
二行代码解决全部网页木马
Mar 28 #Javascript
通过 Dom 方法提高 innerHTML 性能
Mar 26 #Javascript
js用图作提交按钮或超连接
Mar 26 #Javascript
利用js对象弹出一个层
Mar 26 #Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
Mar 22 #Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
Mar 22 #Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
Mar 22 #Javascript
You might like
php minixml详解
2008/07/19 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
自己的js工具 Event封装
2009/08/21 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
JS实现购物车特效
2017/02/02 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
Python3 入门教程 简单但比较不错
2009/11/29 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
浅谈Python中的模块
2020/06/10 Python
python从PDF中提取数据的示例
2020/10/30 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
复古服装:RetroStage
2019/05/10 全球购物
物流经理自我评价
2013/09/23 职场文书
四群教育工作实施方案
2014/03/26 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
护士工作心得体会
2016/01/25 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫