Prototype原型模式

原型模式定義:
用原型實例指定建立對象的種類,而且經過拷貝這些原型建立新的對象.java

Prototype模式容許一個對象再建立另一個可定製的對象,根本無需知道任何如何建立的細節,函數

工做原理是:經過將一個原型對象傳給那個要發動建立的對象,這個要發動建立的對象經過請求原型對象拷貝它們本身來實施建立。this

 

JavaScript的實現:spa

   在Java語言中對象都繼承自java.lang.Object,而java.lang.Object就提供了 Clone的方法,只要實現接口Cloneable,prototype

即表示支持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的對象。到目前爲止,
咱們已經建立了一個須要複製的對象,可是全部的值都是指向父對象的。
 
 

一、爲腳本環境內建對象添加方法:ip


程序代碼:
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;
};原型

 

二、爲用戶自定義類添加方法:

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

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

三、更新自定義類的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屬性 保存了對構造特定對象實例的函數的引用。

 

(未完待續。。。。。)

相關文章
相關標籤/搜索