Javascript 对象继承
这周五,去百度面试Web前段开发工程师,与面试官讨论到JavaScript继承问题,由于平时使用较少,也没说出多少东西。遂回来差了点资料。
?
观点:在JavaScript中,function相当于Java语言定义的类。
定义方式如下:
function foo(x){//用this指定foo的成员变量xthis.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:在方法继承中有涉及到“原型链”。关于原型链有待进一步学习。
?
?
?