`
weigang.gao
  • 浏览: 491193 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

原型模式(5.2)

 
阅读更多

     我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。使用原型对象的好处是可以让所有对象实例共享原型对象所包含的属性和方法。换句话说,不必再构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中,这样所有对象实例都能共享这些信息。

1.理解原型对象

        无论什么时候,只要创建一个新函数,就会根据一组特定的规则为该函数创建一个Prototype属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在的函数的指针(在ECMAScript中函数就是对象)。

 

       创建了自定义的构造函数之后,其原型对象默认只会取得constructors属性;至于其他方法,则都是从Object继承而来的。当调用构造函数创建一个新实例后,该实例的内部包含一个指针(内部属性),指向构造函数的原型对象。ECMA-262第5版中管这个指针叫[[Prototype]]。虽然在脚本中没有标准的方式访问[[Prototype]],但在Firefox, Safari和Chrome在每个对象上都支持一个属性__proto__;而在其他实现中,这个属性对脚本则是完全不可见的。不过,要明确的真正重要的一点就是,这个连接存在于实例与狗仔函数的原型对象之间,而不是存在于实例与狗仔函数之间。

以下面的代码为例

<script type="text/javascript" >  
   function Person(){
   }
   
   Person.prototype.name = '高伟刚';
   Person.prototype.age = 22;
   Person.prototype.job = 'Software Engineer';
   Person.prototype.sayName = function(){
	  alert(this.name);
   };
   
   var person1 = new Person();
   var person2 = new Person();
   
   person1.sayName();//高伟刚
   person2.sayName();//高伟刚
</script>

各对象之间的关系如下:


    说明:1.     每当代码读取某个对象的某个属性时,都会执行一次搜索,目标是具有给定名字的属性。搜索首先从对象实例本身开始。如果在实例中找到了具有给定名字的属性,则返回该属性的值;如果没有找到,则继续搜索指针指向的原型对象,在原型对象中查找具有给定名字的属性。如果在原型对象中找到了这个属性,则返回该属性的值。这正是多个对象实例共享原型所保存的属性和方法的基本原理

 

 

      2 .虽然可以通过对象实例访问保存在原型中的值,但却不能通过对象实例重写原型中的值。如果我们在实例中添加了一个属性,而该属性与原型中的一个属性同名,那我们就在实例中创建了该属性,该属性将会屏蔽原型中的那个属性。来看下面一个例子:

 

<script type="text/javascript" >  
   function Person(){
   }   
   Person.prototype.name = '高伟刚';
   var person1 = new Person();
   var person2 = new Person();
   
   alert(person1.name);//高伟刚
   alert(person2.name);//高伟刚
   person1.name = '高红程';//注意:这是在person1中添加一个name属性
   alert(person1.name);//高红程,来至实例,屏蔽了原型中的同名属性
   alert(person2.name);//高伟刚,来至原型
</script>
 

 

 

hasOwnProperty()方法

     使用hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中。这个方法(不要忘了它是从Object继承而来的)只在给定属性存在于对象实例中时,才会返回true

 

 

 

  • 大小: 29.7 KB
分享到:
评论

相关推荐

    《设计模式实训教程》【PPT+类图与代码+样章】

    3.2.5原型模式实例之快速创建工作周报 3.2.6单例模式实例之多文档窗口 3.3实训练习 第4章结构型模式实训 4.1知识讲解 4.1.1结构型模式概述 4.1.2适配器模式 4.1.3桥接模式 4.1.4组合模式 4.1.5装饰模式 ...

    VirtualBoxSDK-5.2.32-132073.zip

    1. **头文件**:这些文件包含了VirtualBox API的定义,它们定义了各种数据结构、常量和函数原型,使得开发者可以了解如何在自己的应用程序中调用VirtualBox的功能。 2. **库文件**:这些动态链接库(DLLs)或静态库...

    java设计模式

    13.3.2 原型模式的使用场景 13.4 原型模式的注意事项 13.4.1 构造函数不会被执行 13.4.2 浅拷贝和深拷贝 13.4.3 clone与final两个冤家 13.5 最佳实践 第14章 中介者模式 14.1 进销存管理是这个样子的吗? 14.2 中介...

    小D深入浅出设计模式+框架源码剖析实战

    ├─第一章 旭瑶-小滴架构师成长系列软件设计模式课程介绍 │ 1.2设计模式全家桶课程...│ 5.2-创建型设计模式-Prototype原型设计模式实战《下》.mp4 │ 6.1-接口之间的桥梁-适配器设计模式你知道多少.mp4 │ 6.4

    Delphi模式编程第一分卷

    8.3.3 Delphi对象流化与原型模式 8.3.4 范例小结 第9章 适配器模式(Adapter) 9.1 模式解说 9.2 结构和用法 9.2.1 类的适配器模式 9.2.2 对象的适配器模式 9.2.3 问题讨论 9.3 范例与实践 9.3.1 用适配器...

    Delphi模式编程第二分卷

    8.3.3 Delphi对象流化与原型模式 8.3.4 范例小结 第9章 适配器模式(Adapter) 9.1 模式解说 9.2 结构和用法 9.2.1 类的适配器模式 9.2.2 对象的适配器模式 9.2.3 问题讨论 9.3 范例与实践 9.3.1 ...

    java模式,设计模式,多种设计模式

    - **原型模式**(Prototype Pattern):通过复制一个现有的实例来创建新的实例。 - **单例模式**(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。 ##### 5.2 结构型模式 结构型模式关注...

    设计模式可复用面向对象软件的基础.zip

    3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构...

    《设计模式》中文版(23个设计模式的介绍与运用)

    3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构...

    GOLF设计模式(C++语言版)

    3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—...

    设计模式(.PDF)

    3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构...

    Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides23种设计模式

    3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构...

    《国外写的,翻译版本》设计模式

    3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构...

    设计模式文档

    3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构...

    设计模式:可复用面向对象软件的基础--详细书签版

    3.4 prototype(原型)—对象创建型 模式 87 3.5 singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 adapter(适配器)—类对象结构型 模式 92 4.2 bridge(桥接)—...

    设计模式之禅(第2版)

    通过实例展示原型模式在实际项目中的应用场景。 - **13.4 原型模式的注意事项** 讨论在使用原型模式时需要注意的问题。 - **13.5 最佳实践** 分享在实际开发中如何有效运用原型模式的建议。 **第14章 中介者...

    设计模式 GOF 23

    3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构...

    设计模式 design pattern

    3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构...

Global site tag (gtag.js) - Google Analytics