资讯专栏INFORMATION COLUMN

JS对象编程的原型和构造函数混合使用

Null / 1097人阅读

摘要:概括创建自定义类型的最常见方式,就是组合使用构造函数模式与原型模式。应用方式一分开定义,用来理解构造函数与原型方式二动态原型模式定义,避免独立的构造函数和原型,更完美的定义形式。

概括:创建自定义类型的最常见方式,就是组合使用构造函数模式与原型模式。

好处:通过这种方式,不仅每个实例都有自己的一份实例属性的副本,而且同时又共享着对方法的引用,最大限度的节省了内存。而且这种混合模式还支持向构造函数传递参数,可谓是集两种模式之长。

定义形式:有两种定义方式,方式-:分开定义(这样更好理解构造函数和原型),方式二:动态定义(把所有信息都封装在了构造函数中,通过在构造函数中初始化原型,又保持了同时使用构造函数和原型的有点,换句话说,可以通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型)。

应用:

  

方式一:分开定义,用来理解构造函数与原型

function Person(name,age,job){
      this.name=name;    
      this.age=age;       
      this.job=job;       
      this.friends=["Sandy","Court"]; 
 }

Person.prototype={
      constructor:Person,     
      sayName:function(){
         alert(this.name);    
      }
 }
  

方式二:动态原型模式定义,避免独立的构造函数和原型,更完美的定义形式。

function Person(name,age,job){
      this.name=name;
      this.age=age;
      this.job=job;
      this.friends=["xiaohonghua","xiaohuanghua"];

      if(typeof this.sayName!="function"){

          Person.prototype.sayName=function(){
             alert(this.name);
          };
      }

}

这里的sayName()方法不存在的情况下,才会将它添加到原型中。这段代码只会在初次调用构造函数时才会执行,此后,原型已经完成初始化,不需要在做什么修改了。不过如果修改,会立即在所有实例中得到反映。

  

调用:
因为sayName()方法是原型方法,所以是Person实例的所有共享方法,而构造函数中定义的各种属性是各个实例的属性,随意更改,不影响其他实例。

function test(){
     var person1=new Person1("xiaohong",26,"Teacher");
     var person2=new Person1("xiaoming",27,"Soft Engineer");

     person1.friends.push("Van");
     alert(person1.friends);  //xiaohonghua,xiaohuanghua,Van
     alert(person2.friends);  //xiaohonghua,xiaohuanghua
     alert(person1.friends == person2.friends);  //false
     alert(person2.sayName == person2.sayName);  //true
     person1.sayName();       //xiaohong
}

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

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

相关文章

  • JavaScript面向对象程序设计

    摘要:目录导语理解对象和面向对象的程序设计创建对象的方式的继承机制原型对象原型链与原型对象相关的方法小结导语前面的系列文章,基本把的核心知识点的基本语法标准库等章节讲解完本章开始进入核心知识点的高级部分面向对象的程序设计,这一部分的内容将会对对象 目录 导语 1.理解对象和面向对象的程序设计 2.创建对象的方式 3.JavaScript的继承机制 3.1 原型对象 3.2 原型链 3.3 与...

    gitmilk 评论0 收藏0
  • JavaScript面向对象编程

    摘要:基本概念面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。使用面向对象编程是为了促进更好的灵活性和可维护性。面向对象与面向过程比较,面向过程更注重过程。 1:基本概念 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。 这句话的意思是:每个对象能够接受信息,处理数据和发送消息给其他对象;这就意味着在这个编程模式下,每一个对象都是一个独立的个体,它可以接收,可以处理,...

    Carbs 评论0 收藏0
  • Javascript面向对象编程 -- 设计模式

    摘要:组合构造函数原型模式解决构造传参和共享问题,可以组合构造函数原型模式不共享的使用构造函数共享的使用原型模式强制指向这种模式也是最常见也是最常用的模式,这种混合模式很好的解决了传参和引用共享的大难题。 写在前面: 之前的文章都是写构造函数,原型之类的。但是我们都知道原型最大的优点也是缺点就是共享。也是我们最头疼的问题.据共享的缘故,导致很多开发者放弃使用原型,因为每次实例化出的数据需要保...

    Cciradih 评论0 收藏0
  • 浅谈JavaScript面向对象

    摘要:不必在构造函数中定义对象实例的信息。其次,按照一切事物皆对象的这饿极本的面向对象的法则来说,类本身并不是一个对象,然而原型方式的构造函数和原型本身也是个对象。第二个问题就是在创建子类型的实例时,不能向超类型的构造函数中传递参数。 前言 对象(Object)应该算是js中最为重要的部分,也是js中非常难懂晦涩的一部分。更是面试以及框架设计中各出没。写这篇文章,主要参考与JavaScrip...

    cyixlq 评论0 收藏0
  • JavaScript面向对象核心知识归纳

    摘要:一面向对象概念面向对象就是使用对象。因此在构造函数中表示刚刚创建出来的对象。在构造函数中利用对象的动态特性为其对象添加成员。 一、面向对象 1.1 概念 面向对象就是使用对象。面向对象开发就是使用对象开发。 面向过程就是用过程的方式进行开发。面向对象是对面向过程的封装。 1.2 三大特性 抽象性所谓的抽象性就是:如果需要一个对象描述数据,需要抽取这个对象的核心数据 提出需要的核心...

    TalkingData 评论0 收藏0

发表评论

0条评论

Null

|高级讲师

TA的文章

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