Prototype原型模式

原型模式定义:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.

Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,

工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

JavaScript的实现:

   在Java语言中对象都继承自java.lang.Object,而java.lang.Object就提供了 Clone的方法,只要实现接口Cloneable,

即表示支持Clone,否则抛出异常。在这点JavaScript是非常接近的,所有的对象都是从 Object继承,

不过Object并不支持Clone的方法,但是我们可以通过自己对于JavaScript通过expanddo的形式实现Clone 方法,

这样日后所有的对象创建都实现了Clone方法。

 
    因为JavaScript本身没有提供Clone的方法,同时对于对象的赋值如var a=new Object();var b=a,这样的代码a,b是指向同一对象的,
要创建一个对象必须通过new 这个关键字来实现,因此在Clone的实现过程,我内部定义了一个构造子(constructor)CloneModel,
同时指定其父对象为要进行Clone活动本身的对象,因此使用了this关 键字,在我们定义的构造子CloneModel的基础上我们创建一个一个对象,
因为构造子内部没有任何代码,新创建的对象实际上说所有的实现都在父对象 中,也就是我们需要进行Clone的对象。到目前为止,
我们已经创建了一个需要复制的对象,但是所有的值都是指向父对象的。
 
 

1、为脚本环境内建对象添加方法:


程序代码:
Array.prototype.max = function()
{
var i, max = this[0];
for (i = 1; i < this.length; i++)
{
if (max < this[i])
max = this[i];
}
return max;
};

2、为用户自定义类添加方法:

程序代码:
function TestObject(name)
{
this.m_Name = name;
}

TestObject.prototype.ShowName = function()
{
alert(this.m_Name);
};

3、更新自定义类的prototype:


程序代码“
function TestObjectA()
{
this.MethodA = function()
{
alert('TestObjectA.MethodA()');
}
}

function TestObjectB()
{
this.MethodB = function()
{
alert('TestObjectB.MethodB()');
}
}

TestObjectB.prototype = new TestObjectA();

prototype还有一个默认的属性:constructor,是用来表示创建对象的函数的(即我们OOP里说的构造函数)。

constructor属 性是所有具有prototype属性的对象的成员。它们包括除Global和Math对象以外的所有JScript内部对象。

constructor属性 保存了对构造特定对象实例的函数的引用。

(未完待续。。。。。)

 
 
 
原文地址:https://www.cnblogs.com/Duqinqin/p/4106871.html