JS对象编程的原型和组织函数夹杂运用

  1. 归纳综合:建立自定义范例的最常见体式格局,就是组合运用组织函数情势与原型情势。

  2. 优点:经由过程这类体式格局,不仅每一个实例都有本身的一份实例属性的副本,而且同时又同享着对要领的援用,最大限制的节省了内存。而且这类夹杂情势还支撑向组织函数通报参数,可谓是集两种情势之长。

  3. 定义情势:有两种定义体式格局,体式格局-:离开定义(如许更好明白组织函数和原型),体式格局二:动态定义(把一切信息都封装在了组织函数中,经由过程在组织函数中初始化原型,又坚持了同时运用组织函数和原型的有点,换句话说,能够经由过程搜检某个应当存在的要领是不是有用,来决议是不是须要初始化原型)。

  4. 运用:

体式格局一:离开定义,用来明白组织函数与原型

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
}
    原文作者:LoveJing526
    原文地址: https://segmentfault.com/a/1190000002809602
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞