• js中的原型


    一、在js中的构造函数与原型

          js中没有类的概念,只是把一个对象实例化,这个对象一般会成为原型对象。js中所以的函数都有一个prototype属性,这个属性引用了一个对象, 即原型对象,也简称原型。这个函数包括构造函数和普通函数。

          

    复制代码
       function A(X) {
            this.x=x;
       }
    
      var obj = new A(1);
    
      alert( A.x)// 1
    复制代码

       这其中最重要的是要有this 这个属性,实例化以后才能直接用。new  以后this  指向的是新对象。

       实例化  object  对象有三步:

         1、创建obj对象:obj= new Object();

         2、将obj 的内部_proto_指向构造他的函数A的prototype。实例化的对象内部没有prototype,他是通过_proto_来取得原型链上的原型属性与原型方法。

        obj.constructor === A.prototype.constructor ,类的实例对象的constructor属性永远指向"构造函数"的prototype.constructor),从而使得obj.constructor.prototype指向A.prototype

         3. 将obj作为this去调用构造函数A,从而设置成员(即对象属性和对象方法)并初始化。

    var num=0;
    for(o in A.prototype) {
      alert(o);//alert出原型属性名字
      num++;
    }
    alert("member: " + num);//alert出原型所有成员个数。

       二、原型与继承

          原型继承:

       

    复制代码
    function A(x){
       this.x = x;
     }
     A.prototype.a = "a";
     function B(x,y){
       this.y = y;
       A.call(this,x);
     }
     B.prototype.b1 = function(){
       alert("b1");
     }
     B.prototype = new A();
     B.prototype.b2 = function(){
       alert("b2");
     }
     B.prototype.constructor = B;
     var obj = new B(1,3);
    复制代码
    复制代码
       function A (X) {
             this.x=x;
      }
    
       A.prototype.a ='a';
    
    现在 function A (X) {
        this.x=x;
        this.a ="a";
    }
       
        function B (x,y){
               this.y=y;
               A.call(this,x);
    }
    
    
    现在  function B (x,y){
            this.x=x;
    this.y=y;
        
         
    }
    
       B.prototye.b1=funcrion(){
           alert ('b1');
    }
    
    现在  function B (x,y){
            this.x=x;
          this.y=y;
          this.b1=  funcrion(){
           alert ('b1');
         
    }
    
    
      B.prototype = new A();
    
      现在  B.prototype {
        this.x=x;
        this.a ="a";
    }
    
    
     B.prototype.b2 = function(){
        alert("b2");
      }
    现在:
       B.prototype {
        this.x=x;
        this.a ="a";
        this.b2 = function(){
        alert("b2");
      }
    }
    
      B.prototype.constructor = B;
      var obj = new B(1,3);

    输出: function B(1,3){
      this.y = y;
      A.call(this,x);
    }

    obj :{x:1;y:3}
     
  • 相关阅读:
    「UVA12293」 Box Game
    「CF803C」 Maximal GCD
    「CF525D」Arthur and Walls
    「CF442C」 Artem and Array
    LeetCode lcci 16.03 交点
    LeetCode 1305 两棵二叉搜索树中的所有元素
    LeetCode 1040 移动石子直到连续 II
    LeetCode 664 奇怪的打印机
    iOS UIPageViewController系统方法崩溃修复
    LeetCode 334 递增的三元子序列
  • 原文地址:https://www.cnblogs.com/zk666/p/6840883.html
Copyright © 2020-2023  润新知