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

Javascript 对象继承

这周五,去百度面试Web前段开发工程师,与面试官讨论到JavaScript继承问题,由于平时使用较少,也没说出多少东西。遂回来差了点资料。

?

观点:在JavaScript中,function相当于Java语言定义的类。

定义方式如下:

function foo(x){
//用this指定foo的成员变量x
this.x = x;
//这个y是foo的私有变量,无法被继承
var y = "This is a y";
this.z = "A z";
}

?

1.变量的继承?

?定义fooc并继承foo的成员变量:

function fooc(){
foo.apply(this, arguments);
//fooc自己的成员变量
 this.m = "An m";
}

?测试:

var fooc = new fooc("An x");
alert("fooc.x: "+fooc.x +"\n"+
         "fooc.y: "+fooc.y +"\n"+
         "fooc.z: "+fooc.z +"\n"+
         "fooc.m:"+fooc.m         
         );//从测试结果可得出fooc继承了foo的x和z变量。

?

?2.方法的继承

面试中,方法的继承提到了函数原型(prototype),实现方法的继承。

//使用原型,则有foo()定义的对象都可以使用该函数。
foo.prototype.hasx = function(){alert(this.x);}
//采用原型式继承,则每个由fooc()定义的对象都拥有foo对象的方法。
fooc.prototype = new foo();
fooc.prototype.hasm = function(){alert(this.m)};

?测试:

//成功继承foo的hasx()方法
fooc.hasx();
fooc.hasm();

?

?Ps:在方法继承中有涉及到“原型链”。关于原型链有待进一步学习。

?

?

?