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》