• 2.JavaScript中的原型规则以及原型设计模式


    • 原型规则

      1. 原型规则
        • 所有的引用类型(数组、对象、函数),都具有对象特征,即可自由扩展属性;
        • 所有的引用类型,都有一个_proto_ 属性(隐式原型),属性值是一个普通对象;
        • 所有函数,都具有一个prototype(显示原型),属性值也是一个普通原型;
        • 所有的引用类型(数组、对象、函数),其隐式原型指向其构造函数的显式原型;(obj.proto === Object.prototype);
        • 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的_proto_(即它的构造函数的prototype)中去寻找;
      1. 原型对象:prototype 在js中,函数对象其中一个属性:原型对象prototype。普通对象没有prototype属性,但有_proto_属性。 原型的作用就是给这个类的每一个对象都添加一个统一的方法,在原型中定义的方法和属性都是被所以实例对象所共享。
        1 var person = function(name){
        2     this.name = name
        3 };
        4 person.prototype.getName=function(){//通过person.prototype设置函数对象属性
        5     return this.name; 
        6 }
        7 var crazy= new person(‘crazyLee’);
        8 crazy.getName(); //crazyLee//crazy继承上属性
      2. 原型链  当试图得到一个对象f的某个属性时,如果这个对象本身没有这个属性,那么会去它的_proto_(即它的构造函数的prototype)obj._proto_中去寻找;当obj._proto也没有时,便会在obj._proto.proto(即obj的构造函数的prototype的构造函数的prototype)中寻找;
    • 设计模式

      • 工厂模式

                 在函数内创建一个对象,给对象赋予属性及方法再将对象返回

     1 function Person() {
     2     var People = new Object();
     3     People.name = 'CrazyLee';
     4     People.age = '25';
     5     People.sex = function(){
     6         return 'boy';
     7     };
     8     return People;
     9 }
    10  
    11 var a = Person();
    12 console.log(a.name);//CrazyLee
    13 console.log(a.sex());//boy
    1. 构造函数模式

           无需在函数内部重新创建对象,而是用this指代

     1 function Person() {
     2     this.name = 'CrazyLee';
     3     this.age = '25';
     4     this.sex = function(){
     5         return 'boy'
     6     };
     7     
     8 }
     9  
    10 var a = new Person();
    11 console.log(a.name);//CrazyLee
    12 console.log(a.sex());//boy
    1. 原型模式

                 函数中不对属性进行定义,利用prototype属性对属性进行定义,可以让所有对象实例共享它所包含的属性及方法。

    function Parent() {
        Parent.prototype.name = 'carzy';
        Parent.prototype.age = '24';
        Parent.prototype.sex = function() {
            var s="女";
                 console.log(s);
        }
    }
     
    var  x =new  Parent();  
    console.log(x.name);      //crazy
    console.log(x.sex());       //
    1. 混合模式

                原型模式+构造函数模式。这种模式中,构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性

     1 function Parent(){  
     2     this.name="CrazyLee";  
     3     this.age=24;  
     4 };
     5 Parent.prototype.sayname=function(){  
     6     return this.name;  
     7 };
     8  
     9 var x =new Parent(); 
    10 console.log(x.sayname());   //Crazy
    1. 动态原型模式

             将所有信息封装在了构造函数中,而通过构造函数中初始化原型,这个可以通过判断该方法是否有效而选择是否需要初始化原型。

     1 function Parent(){  
     2     this.name="CrazyLee";  
     3     this.age=24;  
     4     if(typeof Parent._sayname=="undefined"){     
     5         Parent.prototype.sayname=function(){  
     6             return this.name;  
     7         }  
     8         Parent._sayname=true;  
     9     }         
    10 };   
    11  
    12 var x =new Parent();  
    13 console.log(x.sayname()); 
  • 相关阅读:
    Java判断一个字符是数字或字母
    java数组和字符串相互转换
    java 字符串截取的三种方法
    Templates && Algorithms
    挖坑——未完成题目列表QwQ
    作业_2018.08.25
    BZOJ1008 [HNOI2008]越狱 (快速幂,组合)
    UR #3 核聚变反应强度( gcd )
    A Super Hero
    NOIP2015 pj
  • 原文地址:https://www.cnblogs.com/xiaole9924/p/11836431.html
Copyright © 2020-2023  润新知