简明现代魔法 -> JavaScript -> JavaScript 多种方法实现类

JavaScript 多种方法实现类

2010-04-25

构造方法

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;
	}
}
随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们