Person.call(this,参数1,参数2,...);这种继承方法只能继承属性及以属性的形式添加的方法 比如 function Person(name,sex){ this.name = name; this.sex =sex; this.test=function(){ alert(this.sex); } } function Worker(name,sex,job){ Person.call(this,name,sex); this.job = job; } var obj1 = new Worker('姓名','男’,'工程师'); obj1.test();//可以访问test方法,其实是访问test属性,只是test属性的值是个函数而已。 如果是以原型prototype给Person类添加的方法,则子类的对象obj1无法访问父类的方法 比如 Person.prototype.showName=function(){ alert(this.name); } var obj2 = new Worker('姓名','男’,'工程师'); obj2.showName();//会报错,访问不到showName方法 解决方案是把父类的原型赋值给子类的原型 Worker.prototype = Person.prototype//此语句有引用赋值的BUG,导致当子类改变时父类也会跟着改变,解决方案 for(var i in Person.prototype){ Worker.prototype[i] = Person.prototype[i] } ![]() |
|
来自: 向着太阳生 > 《Javascript》