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 相关文章推荐
JS动态添加option和删除option(附实例代码)
Apr 01 Javascript
php跨域调用json的例子
Nov 13 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
Sep 22 Javascript
kindeditor修复会替换script内容的问题
Apr 03 Javascript
理解javascript中的严格模式
Feb 01 Javascript
关于JS中的方法是否加括号的问题
Jul 27 Javascript
Javascript this 函数深入详解
Dec 13 Javascript
开发用到的js封装方法(20种)
Oct 12 Javascript
ES6顶层对象、global对象实例分析
Jun 14 Javascript
vue+Element-ui实现分页效果
Nov 15 Javascript
jquery实现淡入淡出轮播图效果
Dec 13 jQuery
一道JS算法面试题——冒泡、选择排序
Apr 21 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
php短域名转换为实际域名函数
2011/01/17 PHP
php 购物车完整实现代码
2014/06/05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
php数组添加元素方法小结
2014/12/20 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
基于python实现学生管理系统
2018/10/17 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
Python Http请求json解析库用法解析
2020/11/28 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
strstr()的简单实现
2013/09/26 面试题
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
暑假学习心得体会
2014/09/02 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis