zoukankan      html  css  js  c++  java
  • js中的原型

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

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

          

    function A(x) {
    this.ab=x;
    }

    var demo = new A(1);

    console.log(demo)

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

       实例化  object  对象有三步:

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

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

        obj._proto_.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}
  • 相关阅读:
    Mybatis入门之常规操作CURD案例Demo(附源码)
    如何捕获Wince下form程序的全局异常
    如何捕获winform程序全局异常?(续)
    log4net学习目录
    如何捕获winform程序全局异常?
    有关学习的思考
    使用VS2012主题插件创建自己的主题
    Vistual Studio 2012更换皮肤
    log4net使用经验总结
    log4net使用流程
  • 原文地址:https://www.cnblogs.com/leyan/p/6428307.html
Copyright © 2011-2022 走看看