zoukankan      html  css  js  c++  java
  • 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}
     
  • 相关阅读:
    创建XNA Shooter游戏——概述
    Android 界面切换与恢复原生界面
    输入和用户界面——SpaceCamera类
    ASP.NET下FCKedit配置及使用参考
    1282. Game Tree 夜
    1122. Game 夜
    1136. Parliament 夜
    hdu 3905 Sleeping 夜
    1195. Ouths and Crosses 夜
    1210. Kind Spirits 夜
  • 原文地址:https://www.cnblogs.com/zk666/p/6840883.html
Copyright © 2011-2022 走看看