JavaScript 实现类的多种方法实例


Posted in Javascript onMay 01, 2013

构造方法

function coder()
{
    this.name = '现代魔法';
    this.job = 'Web 开发者';
    this.coding = function ()
    { alert('我正在写代码'); }
}
var coder = new coder();
alert(coder.name);
coder.coding();

工厂方法
function createCoderFactory()
{
    var obj = new Object();
    obj.name = '现代魔法';
    obj.job = '程序员';
    obj.coding = function ()
    {
        alert('我正在写代码');
    };
    return obj;
}
var coder = createCoderFactory();
alert(coder.name);
coder.coding();

工厂方法和构造方法都有着一个相同的缺点,就是每创建一个实例,都会实例化该类的每个函数。

原型链

function coder(){}
coder.prototype.name = '现代魔法';
coder.prototype.job = '程序员';
coder.prototype.coding = function(){
    alert('我正在写代码');
};
var coder = new coder();
alert(coder.name);
coder.coding();

原型链有个缺点就是它所有属性都共享,只要一个实例改变其他的都会跟着改变。如:
var coder1 = new coder();
var coder2 = new coder();
alert(coder1.name);     /*显示现代魔法*/
coder2.name = 'nowamagic';
alert(coder1.name);     /*显示nowamagic*/
alert(coder2.name);     /*这个也显示nowamagic*/

混合方式
以上三种都有着各自的缺点,所以我们要加以改进。
function coder()
{
    this.name = '现代魔法';
    this.job = '程序员';
}
coder.prototype.coding = function(){
    alert('我正在写代码');
};

动态原链
要解决前三种的缺点,还有一种方法。
function coder()
{
    this.name = '现代魔法';
    this.job = '程序员';
    if (typeof(coder._init) == 'undefined')
    {
        this.coding = function ()
        {
            alert('我正在写代码');
        };
        this._init = true;
    }
}
Javascript 相关文章推荐
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 Javascript
jqgrid 表格数据导出实例
Nov 21 Javascript
jquery 淡入淡出效果的简单实现
Feb 07 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
Feb 15 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
Mar 12 Javascript
JavaScript中的Object对象学习教程
May 20 Javascript
JS实现图片点击后出现模态框效果
May 03 Javascript
SVG动画vivus.js库使用小结(实例代码)
Sep 14 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
Aug 04 Javascript
JavaScript中作用域链的概念及用途讲解
Aug 06 Javascript
js闭包和垃圾回收机制示例详解
Mar 01 Javascript
一文彻底理解js原生语法prototype,__proto__和constructor
Oct 24 Javascript
Json字符串转换为JS对象的高效方法实例
May 01 #Javascript
Jquery post传递数组方法实现思路及代码
Apr 28 #Javascript
javascript中的onkeyup和onkeydown区别介绍
Apr 28 #Javascript
JQuery中如何传递参数如click(),change()等具体实现
Apr 28 #Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 #Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
Apr 28 #Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 #Javascript
You might like
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
python xml解析实例详解
2016/11/14 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
python素数筛选法浅析
2018/03/19 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
Python列表对象实现原理详解
2019/07/01 Python
Django的Modelforms用法简介
2019/07/27 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
flask实现验证码并验证功能
2019/12/05 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
体育之星事迹材料
2014/05/11 职场文书
娱乐节目策划方案
2014/06/10 职场文书
启动仪式策划方案
2014/06/14 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android