日期:2014-05-16 浏览次数:20454 次
这周五,去百度面试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:在方法继承中有涉及到“原型链”。关于原型链有待进一步学习。
?
?
?