原型模式,每个创建的对象都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。
-----------------------------------------------------------
-------------

  • isPertotypeOf()方法来确定对象之前是否存和原型之间的关系;

  • 不能重写原型中的属性,如果给对象实例添加的属性与实例原型中的一个属性同名,那么在实例对象中创建的属性会将原型中的屏蔽掉。可以用delete删除实例对象中自己添加的属性;

  • hasOwnPrototype()可以确定属性是原型中还是实例对象中,当时实例对象中时,返回的是true;

  • in操作符,有两种使用方式,单独使用和for-in 循环中。单独使用,通过对象能够访问属性时返回true,无论时在原型中还是实例对象中。

下面是依据以上属性、方法列举的实例

function Person(){
}
Person.prototype.name="Nike";
Person.prototype.age=29;
Person.prototype.job="Software Engineer";
Person.prototype.sayName=function(){alert(this.name);
};function test(){var person1=new Person();
person1.name="TONY";
//delete person1.name; //删除创建实例person1时赋值的name
person1.sayName();var person2=new Person();
person2.sayName();

基于原型模式创建的对象指向同一个对象,person1和person2访问的都是同一组属性和同一个sayName()函数,所以返回是true

alert(person1.sayName==person2.sayName);

判断实例对象是否是Person原型模式,person1是Person的原型模式

alert(window.Person.prototype.isPrototypeOf(person1));

hasOwnProperty()方法判断属性是否是实例对象中,如果是,返回true

alert("  person1:"+person1.hasOwnProperty("name")+"  person2:"+ person2.hasOwnProperty("name"));

in操作符,name属性是否在person1对象中,该属性是实例对象自己赋值的

alert( "name" in person1);

in操作符,name属性是否在person2对象中,该属性是原型模式中的

alert("name" in person2);

判断对象的属性是否是原型中的,属性在对象中,而且不是实例对象自己赋值的便会返回true

alert(hasOwnPropertyIn(person1,"name");alert( hasOwnPropertyIn(person2,"name"));

可以将in操作符与hasOwnProperty()方法一起使用,用于判断属性是否是原型中值

function hasOwnPropertyIn(object,sub){return  (!object.hasOwnProperty(sub)) && (sub in object);
}

面向对象的程序设计之原型模式相关推荐

  1. JS面向对象的程序设计之创建对象_工厂模式,构造函数模式,原型模式-1

    前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下.如有纰漏或错误,会非常感谢您的指出.文中绝大部分内容引用自<Ja ...

  2. js面向对象的程序设计 --- 中篇(创建对象) 之 原型模式

    ·原型模式 我们创建的每一个函数都由一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有 实例共享的属性和方法. 如果按照字面意思来理解,那 ...

  3. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之原型模式

    · 原型模式在王者荣耀中的应用 · 一.简述 在王者荣耀中,克隆模式算是一个人气比较高的娱乐模式了,因为该模式下双方可以各有五个一模一样的英雄,可以带给玩家不同的游戏体验,特别是有一些比较好玩的英雄, ...

  4. JavaScript 面向对象 (prototype 原型模式)

    一. JavaScript 设计思想 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版.这是历史上第一个比较成熟的网络浏览器,轰动一时.但是,这个版本的浏览器只能用来浏览 ...

  5. javascript 面向对象编程(工厂模式、构造函数模式、原型模式)

    javascript 面向对象编程(工厂模式.构造函数模式.原型模式) CreateTime--2018年3月29日17:09:38 Author:Marydon 一.工厂模式 /*** 工厂模式*/ ...

  6. [Object]面向对象编程(高程版)(二)原型模式

    [Object]面向对象编程(高程版)(二)原型模式 博客分类: Web前端-JS语言核心 作者:zccst 三.原型模式 每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个 ...

  7. 9.面向对象、面向对象-原型模式

    面向对象 介绍: 到目前为止,我们解决问题时,都使用一系列的变量声明.条件.for/while语句和函数调用.这是过程型思维:先这样做,再那样做,等等.在面向对象编程中,我们从对象的角度考虑问题,而对 ...

  8. js面向对象-组合使用构造函数模式和原型模式(使用最广泛、认同度最高)

    组合使用构造函数模式和原型模式 构造函数模式用于定义实例属性 原型模式用于定义方法和共享的属性 优点:每个实例都有自己的实例属性的副本,但同时共享对方法的引用,最大限度的节省内存 function P ...

  9. JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象...

    一.仔细分析前面的原型模式创建对象的方法,发现原型模式创建对象,也存在一些问题,如下: 1.它省略了为构造函数传递初始化参数这个环节,结果所有实例在默认的情况下都将取得相同的属性值,这还不是最大的问题 ...

最新文章

  1. Spring Cloud 微服务实战笔记
  2. python创建新文件-python创建和删除文件
  3. headroom.js插件使用方法
  4. Vue列表搜索和排序---vue工作笔记0010
  5. 简单理解编程语言的工作原理
  6. 2022年 品牌新零售将去向何方?
  7. Java计算机毕业设计德云社票务系统源码+系统+数据库+lw文档
  8. Scrum 敏捷项目管理
  9. Linux:一位猫奴的意外逆袭
  10. 运算符重载、STL模板库、类型转换、异常处理机制(C++五)
  11. qq邮箱中的发件服务器是什么格式,qq邮箱的SMTP服务器是什么
  12. python 尖括号表示什么类型,Python的小括弧,中括号,大括号还有尖括号的区别...
  13. 软件测试面试题(二)
  14. python绘制布林带
  15. linux运行php文件
  16. 2019南昌邀请赛网络赛
  17. Mathpix Snip : 一个很使用的公式识别软件
  18. windows安装JDK8教程
  19. 郑林楷计算机系姚班,郑林楷为什么被清华录取 郑林楷在清华很厉害吗
  20. 分享一下我寄样的心得

热门文章

  1. Android Q Labs| 结束演讲
  2. kubernetes 动态扩容pv
  3. web工程中的各种路径(eclipse开发)
  4. 加班越久故障越多,如何跳出程序员的恶性循环?
  5. Spring Boot中验证码实现kaptcha
  6. 管理员必备的Linux系统监控工具
  7. boostrap3常用组件集合
  8. python 操作 excel
  9. PHPRunner中文版
  10. 【理论】红黑树的实现原理