zoukankan      html  css  js  c++  java
  • 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属性 保存了对构造特定对象实例的函数的引用。

    (未完待续。。。。。)

     
     
     
  • 相关阅读:
    python 发包爬取中国移动充值页面---可判断手机号是否异常
    python利用selenium和safari浏览器驱动实现新浪微博自动点赞 Demo
    Django学习报错记录
    nginx和tomcat的区别
    Mac主机映射到域名
    mac下eclipse安装svn插件-subclipse
    移动端——等分,居中
    移动端——重置样式
    M端页面-绝对定位布局
    jquery-练习-折叠效果
  • 原文地址:https://www.cnblogs.com/Duqinqin/p/4106871.html
Copyright © 2011-2022 走看看