想用js的继承优化一段代码,但是发现,参数使用对象格式的,就不行。
我可不想在构造函数中按顺序来写参数。
var P=function(opts){
this.name=opts.name;
this.age=opts.age;
};
P.prototype={
constructor:P,
getName:function(){
return this.name;
},
getAge:function(){
return this.age;
}
};
var S=function(opts){
P.call(this,opts);
this.address=opts.address;
};
S.prototype=new P();
S.prototype.constructor=S;
S.prototype.getAddress=function(){
return this.address;
}
这个怎么破?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
去掉这句代码
js面向对象这么写累死人,推荐[aralejs]http://www.aralejs.org/框架。
贴一个arale面向对象的hello world!
1、定义对象:
2、继承对象
3、使用对象
符合common.js规范。
因为你在
S
的构造函数内已经call
了P
,于是也就已经有了this.name
和this.age
,因此已经没有必要new P()
赋给S.prototype
了,所以把这一句去掉即可:尝试面向对象编程时也遇到题主的问题,翻看《JavaScript 高级程序设计》 第六章的组合继承,和题主是一样的,书中给出的参数是变量,如果想要以对象作为参数,在子类的原型 new父类的构造函数时,就报错了。问题就出在这里,经过尝试,可以将 父类的原型直接赋值给子类的原型,
即可。但有一个严重的问题,就是引用类型的值在所有实例中共享。