我知道这样可以实现继承
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();
首先,第二个方法里面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)……
你这是用call方法来实现继承,我想用对象冒充来实现继承,用Son()里面的method去冒充Fahther(),
对象冒充可以继承用构造函数创建的类的属性和方法,为什么不能继承用原型创建的类的属性和方法???
@huifukejian: 为什么不能继承用原型创建的类的属性和方法?也许这种方法就是不能,好比买了一盒鸡蛋,里面不会有鸭蛋……
你见过使用method这种方法的成功案例么?我觉得你需要找出案例,对比分析……
這兒冒充了 constructor, 但沒有冒充到 prototype, 因此沒繼承到。 prototype 可以手動設定或透過 new 運算設定, 但 constructor 本身只是一個 function 並不會默認設定 prototype.
这是别人说的
@huifukejian: 奥,这样啊……就是说原型需要另外继承……
so,我觉得你还是使用我最开始说的方法,没有错的……
我测试过了 提示缺少对象不知道为什么 是不是重载了
son没有继承Father,所以会报错,son对象不支持sayName方法
你的第一种写法,那是Father对象赋值给了son,这样Father的原型属性可以被son找得到,这是js继承的一种实现手段。建议你去了解一下js的原型链,这是js里面很重要的东西。
js在查找作用域变量,原型链是从下往上找的,由于Father对象赋值给了son,那么在查找的时候,先去查son对象的属性,变量等,接着继续往上找它继承的对象的属性变量,原型等等。
对象冒充出来的对象,不包括prototype里面的