日期:2014-05-16  浏览次数:20402 次

JS构造函数问题
function A(x) 

  A.prototype.x = x; 
  A.prototype.ShowA = function(){ alert("A的Show方法!"); };


function B(x,y)
{
  B.prototype.y = y;
  A.call(this,x);
  B.prototype.ShowB = function(){ alert("B的Show方法!"); };
}

B.prototype = new A();
B.prototype.constructor=B;

var obj = new B(10,5);
alert(obj.x);
alert(obj.y);
obj.ShowA();
obj.ShowB();

在这段代码中B.prototype = new A();是什么意思?是把函数对象A保存到B.prototype这个属性里面嘛?保存之后B.prototype.constructor这个值应该是函数A里面的内容,在把这个内容赋值给函数B,这段代码又有什么用呢?因为不管赋值与否对后面的运行是没有妨碍的啊?求大神们详细解释。

------解决方案--------------------
B.prototype = new A(); 
//其实就是模拟继承

B.prototype.constructor=B;
//因为每个构造职数的prototype属性中有一个 constructor属性指回构造函数本身
//因为上面的操作,这个 constructor已经变掉了(指向了 A函数),现在要把他变回来

------解决方案--------------------
B.prototype = new A()-----将A的实例保存到b的原型中去,意思是你以后就不用用一次就去new一次对象了,就直接可以从b的原型中得到
------解决方案--------------------
function B(x,y)
{
B.prototype.y = y;
A.call(this,x);//模拟继承A
B.prototype.ShowB = function(){ alert("B的Show方法!"); };
}