首页 新闻 搜索 专区 学院

js 关于继承的问题

0
悬赏园豆:20 [待解决问题]

我知道这样可以实现继承

function Father(){
  this.name=name;
}
Father.prototype.sayName=function(){
  alert(this.name);
}
function Son(name,age){
  this.name=name;
  this.age=age;
  this.sayAge=function(){
  alert(this.age);
}
}
Son.prototype=new Father();
var son=new Son("zhangsan",20);
son.sayName();
son.sayAge()

 

为什么这样不可以

function Father(name){
  this.name=name;
}
Father.prototype.sayName=function(){
  alert(this.name);
}
function Son(name,age){
  this.method=Father;
  this.method(name);
  delete this.method;
  this.age=age;
  this.sayAge=function(){
  alert(this.age);
}
}
var son=new Son("zhangsan","20");
son.sayName();
son.sayAge();

huifukejian的主页 huifukejian | 初学一级 | 园豆:182
提问于:2012-10-28 20:31
< >
分享
所有回答(5)
0
2012 | 园豆:19574 (专家六级) | 2012-10-29 08:22
0

首先,第二个方法里面son没有继承father的sayName方法吧……

  Son.prototype = new Father();

  Son.prototype.constructor = Son;

  Son.prototype.sayName = function(){

    alert(this.Name);

  }

然后,第二个方法里面

  this.method=Father;
  this.method(name);
  delete this.method;

这里没有实现继承吧,可以写成Father.call(this,name)……

ms_water | 园豆:510 (小虾三级) | 2012-10-29 09:28

你这是用call方法来实现继承,我想用对象冒充来实现继承,用Son()里面的method去冒充Fahther(),

对象冒充可以继承用构造函数创建的类的属性和方法,为什么不能继承用原型创建的类的属性和方法???

支持(0) 反对(0) huifukejian | 园豆:182 (初学一级) | 2012-10-29 18:05

@huifukejian: 为什么不能继承用原型创建的类的属性和方法?也许这种方法就是不能,好比买了一盒鸡蛋,里面不会有鸭蛋……

你见过使用method这种方法的成功案例么?我觉得你需要找出案例,对比分析……

支持(0) 反对(0) ms_water | 园豆:510 (小虾三级) | 2012-10-30 08:31

這兒冒充了 constructor, 但沒有冒充到 prototype, 因此沒繼承到。 prototype 可以手動設定或透過 new 運算設定, 但 constructor 本身只是一個 function 並不會默認設定 prototype.

 

这是别人说的  

支持(0) 反对(0) huifukejian | 园豆:182 (初学一级) | 2012-10-30 14:45

@huifukejian: 奥,这样啊……就是说原型需要另外继承……

so,我觉得你还是使用我最开始说的方法,没有错的……

支持(0) 反对(0) ms_water | 园豆:510 (小虾三级) | 2012-10-30 16:38
0

我测试过了 提示缺少对象不知道为什么 是不是重载了

转角遇到bug | 园豆:227 (菜鸟二级) | 2012-10-29 22:15
0

son没有继承Father,所以会报错,son对象不支持sayName方法

你的第一种写法,那是Father对象赋值给了son,这样Father的原型属性可以被son找得到,这是js继承的一种实现手段。建议你去了解一下js的原型链,这是js里面很重要的东西。

js在查找作用域变量,原型链是从下往上找的,由于Father对象赋值给了son,那么在查找的时候,先去查son对象的属性,变量等,接着继续往上找它继承的对象的属性变量,原型等等。

ljcheibao | 园豆:132 (初学一级) | 2012-12-04 09:44
0

对象冒充出来的对象,不包括prototype里面的

少年学编程 | 园豆:3 (初学一级) | 2012-12-14 14:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册