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}

 

posted @ 2017-02-22 12:16  雪昀  阅读(883)  评论(0编辑  收藏  举报