还是继承的问题,求助
先看2段代码
(1)
function Man(age) {
this.age = age;
};
Man.prototype.show = function () {
alert(this.age);
};
function Women(age) {
this.age = age;
}
Women.prototype = new Man();
Women.constructor = Women;
var test = new Women("20");
test.show();//
没有什么问题显示20
----------------------
(2)
var a=function Man(age) {
this.age = age;
};
Man.prototype.show = function () {
alert(this.age);
};
function Women(age) {
this.age = age;
}
Women.prototype = new
a();
Women.constructor = Women;
var test = new Women("20");
test.show();
//为什么仅仅修改了红色部分,就提示没有此方法
//我的理解是,Man构造函数赋给了一个变量a,然后new a()和new Man()不是一样的效果马?!
//为什么不能继承方法阿,其指点!
------解决方案--------------------你这想法还真是奇特,不过我还真是没有想过可以这么写。
我猜测吧,这不能实现的原因应该跟函数定义的这种方法有关,var a = function(){};
跟这种定义函数的方法有关,具体什么关系,没有想过,现在也说不了啥。
猜测一下吧:
构造函数的写法,和赋值的函数写法的本质不同,就是,构造函数的写法,会在预编译的时候,就会执行了。
而赋值的写法,只有当解析到这个赋值语句的时候,才会执行。
那么你这里的那个构造函数,你觉得是在编译的时候,就存在了吗?我觉得应该不是吧。
那么既然不是,他就跟构造函数的那种函数定义方法,在本质上就不同了,所以这里,它也不能算是一个构造函数了吧?
那既然不是,它怎么能当做构造函数使用呢?
编程语言嘛,肯定都是有自己的规则的,那既然这样的写法是不符合规则的,那么肯定就会被处理掉了啊。
差不多就是这样,个人猜测,仅供参考。
------解决方案--------------------不是a 没有,是Man没有。
至于Man,在旧的IE浏览器中,好像是有。
http://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname
xyz is going to be defined as usual, abc is undefined in all browsers but IE — do not rely on it being defined
------解决方案--------------------把
var a=function Man(age){
this.age = age;
};
改为
function Man(age){
this.age = age;
};
var a=Man;
就可以了