问一个继承我问题

fj359941160 2012-10-24 08:32:59
function Person(name) {
this.name = name;
}

function F() {}
F.prototype = Person.prototype;

现在F的构造器不就是Person的构造器了吗?

alert(F.prototype.construct)也就是Person的代码

为什么new F()的时候不会报错。
...全文
150 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sgyyz 2012-10-24
  • 打赏
  • 举报
回复
1.参数可以缺省!
2.继承了,但是他自己还有你自己的构造函数三!
猿敲月下码 2012-10-24
  • 打赏
  • 举报
回复
参考下YUI的继承体系:
<script type="text/javascript">
// subClass子类,superClass父类
function extend(subClass,superClass){
// 新建一个空的类
var F = function(){};
// 父类的prototype赋给空类
F.prototype = superClass.prototype;
// 空类实例赋给子类的prototype
subClass.prototype = new F();
// 这句很重要,子类的constructor指向子类本身,
// 之前是指向F类的
subClass.prototype.constructor = subClass;
// 申明一个superclass变量用来访问父类
subClass.superclass = superClass.prototype;
// 如果父类的prototype指向了Object的prototype,
// 那么父类的构造函数就指向它自己
// alert(superClass.prototype.constructor == Object.prototype.constructor)
if(superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}


var Person = function(name) {
this.name = name;
}

Person.prototype = Object.prototype;
var Man = function() {}

extend(Man,Person);


var p = new Person();
var m = new Man();

alert(Person.prototype.constructor === Person)
</script>
  • 打赏
  • 举报
回复
楼主把constructor写成construct了,改过来就好了
  • 打赏
  • 举报
回复
应该这样

function F() {}
F.prototype = new Person("ZhangSan");
Vidor 2012-10-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

new F()仍然是使用 F 作为构造函数,并不依赖于原型的constructor属性,constructor存在的意义倾向于类型识别。

例如:你可以将Array的constructor改为String,除了arr.constructor之外,其它功能并不影响。
JScript code
Array.prototype.constructor = String;
var arr = [……
[/Quote]

对于内置类型,最好不要这么干,首先constructor识别玩死人,再者内部实现细节毕竟不清楚,constructor或许另有用处。
Vidor 2012-10-24
  • 打赏
  • 举报
回复
new F()仍然是使用 F 作为构造函数,并不依赖于原型的constructor属性,constructor存在的意义倾向于类型识别。

例如:你可以将Array的constructor改为String,除了arr.constructor之外,其它功能并不影响。
Array.prototype.constructor = String;
var arr = ['c','b','a'];
alert(arr.constructor===String);
arr.sort();
alert(arr);
fj359941160 2012-10-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

为什么要报错?
[/Quote]

F的构造函数已经变成Person的了。
Person的构造函数不是需要传入一个name属性吗。

怎么不会报错。
BaronZ 2012-10-24
  • 打赏
  • 举报
回复
为什么要报错?
BaronZ 2012-10-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:

为什么要报错?


F的构造函数已经变成Person的了。
Person的构造函数不是需要传入一个name属性吗。

怎么不会报错。
[/Quote]
js和java不一样。有函数名一样就行,参数多了也没事,少了也没事。详细的你百度一下“javascript argument”

87,903

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧