资讯专栏INFORMATION COLUMN

面向对象的程序设计之原型模式

yunhao / 3039人阅读

摘要:可以用删除实例对象中自己添加的属性可以确定属性是原型中还是实例对象中,当时实例对象中时,返回的是操作符,有两种使用方式,多带带使用和循环中。多带带使用,通过对象能够访问属性时返回,无论时在原型中还是实例对象中。

原型模式,每个创建的对象都有一个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);
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85702.html

相关文章

  • JS面向对象编程封装

    摘要:在基于原型的面向对象方式中,对象则是依靠构造函数和原型构造出来的。来看下面的例子优点与单纯使用构造函数不一样,原型对象中的方法不会在实例中重新创建一次,节约内存。 我们所熟知的面向对象语言如 C++、Java 都有类的的概念,类是实例的类型模板,比如Student表示学生这种类型,而不表示任何具体的某个学生,而实例就是根据这个类型创建的一个具体的对象,比如zhangsan、lisi,由...

    YFan 评论0 收藏0
  • 面向对象程序设计创建对象

    摘要:对象的定义无序属性的集合属性的值可以是基本值对象或者函数每个对象都是基于一个应用类型创建的这个引用类型可以是内置的例如也可以是用户自定义的基于创建对象所有的对象都是继承自的因此我们可以从着手创建对象通过关键字创建对象通过对象字面量创建对象基 对象的定义:无序属性的集合,属性的值可以是基本值、对象或者函数.每个对象都是基于一个应用类型创建的,这个引用类型可以是内置的(例如Object A...

    acrazing 评论0 收藏0
  • 面向对象PHP】模式原型

    摘要:原型模式平行的继承层次使用工厂模式在大型设计中,必须去维护大量的产品类。上文中,称之为特殊的耦合在这里我们介绍一种其抽象工厂模式的变体原型模式。面向对象设计模式目录 原型模式 平行的继承层次使用工厂模式在:大型设计中,必须去维护大量的产品类。(上文中,称之为特殊的耦合) 在这里我们介绍一种其抽象工厂模式的变体:原型模式。它使用clone关键词,来复制具体产品类,使得具体产品类能完成自我...

    Alan 评论0 收藏0
  • JS面向对象程序设计_创建对象组合使用模式-2

    摘要:组合使用构造函数模式和原型模式创建自定义类型的最常见方式,就是组合使用构造函数模式与原型模式。也就是说,寄生构造函数模式下,构造函数创建的对象与在构造函数外创建的对象没有什么不同。 前言 最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下。如有纰漏或错误,会非常感谢您的指出。文中绝大部分内容引用自《JavaScri...

    xuexiangjys 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<