javascript - 为什么子类的原型要指向父类的实例而不是父类的原型
迷茫
迷茫 2017-04-11 09:21:35
[JavaScript讨论组]

一道面试题
为什么子类的原型要指向父类的实例而不是父类的原型

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
黄舟

我觉得,并不是语法上不能实现对构造函数的参数传递,而是这样做不符合面向对象编程的规则:对象(实例)才是属性的拥有者。
如果在子类定义时就将属性赋了值,对象实例就不能再更改自己的属性了。这样就变成了类拥有属性,而不是对象拥有属性了。
举个例子,子类 Children 继承父类 Parents,Parents 构造函数:
function Parents(name){ this.name=name; }
使用原型链并给父类构造函数传参数:
Children.prototype=new Parents("Hello");
那么此时,Children 类就拥有了 name=“Hello” 属性,而 Children 类的实例对象 c1、c2、c3 等等只能被迫接受这个 name 属性。Children 是 "Hello" 的拥有者而 c1、 c2、c3不是!
如此写完全失去了面向对象编程的意义,所以在原型链继承方式中规定不能对父类构造函数传递参数。也因为这个原因,原型链继承方式并不实用。

PHP中文网
function P(){}
function C(){}

var p = new P(); 
C.prototype = p; 

这样写的好处是子类如果更改了prototype,那么更改的东西也是附加到p这个实例上的

如果你直接写C.prototype = P.prototype,那你对C的prototype的任何修改都会同时修改P的prototype

大家讲道理

原型继承么,原型链

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号