class Person{
}
class Child extends Person{ xxx(){
}
} class 中 方法是绑定在该类的原型上 Person 是 Child 的原型 为啥 Person 实例化对象无法调用 Child 上的 XXX 方法 有哪个大佬解释一下 感觉是我没弄懂 继承的问题。。。
1
cwz346852114 OP 111
|
2
cwz346852114 OP 111222
|
3
cwz346852114 OP Object.getPrototypeOf(child)的时候返回的原型是 Person 我在 Person 上面也找到了 xxx 这个方法 为啥父级直接没法调用
|
4
murmur 2020-12-31 16:03:25 +08:00
是我出现幻觉了么,child 继承 person,也应该说 child 的实例调用 person 的方法
|
5
murmur 2020-12-31 16:03:52 +08:00
class Person{
test1(params) { console.log(111); } } class Child extends Person{ test2(params) { console.log(222); } } var c = new Child(); c.test2(); c.test1(); 这样是没问题的 |
6
cwz346852114 OP @murmur 我的意思是 父级实例化对象 调用子集里面的 xxx 方法
|
7
murmur 2020-12-31 16:07:58 +08:00
@cwz346852114 你去看看面向对象的思路,都是子类访问父类的方法,我还没听说过父类访问子类的方法
|
8
1KN6sAqR0a57no6s 2020-12-31 16:09:58 +08:00
但凡你学过一点面向对象编程也问不出这么不着边际的问题,差的知识太多了,先看看基础吧
|
9
zengzizhao 2020-12-31 16:28:38 +08:00
去看看 C++里的面向对象,从内存方面了解一下
|
10
yanguoyu 2020-12-31 17:52:14 +08:00
难道要问的是类似 C++的虚函数,父类指针调用子类方法?
|
11
Zhuzhuchenyan 2020-12-31 19:37:24 +08:00
帮你分析下
> class Person {} > class Child extends Person {test(){}} > Child.prototype.hasOwnProperty('test') True > let aChild = new Child() > aChild.__proto__ === Child.prototype True > aChild.__proto__.__proto__ === Person.prototype True 这才是这根原型链的本来面貌,更具体的,对 Person 的实例化对象而言 > let aPerson = new Person() > aPerson.__proto__ === Person.prototype True aPerson 的原型链中跳过了一个环节,将 Child.prototype 跳过了,从而 aPerson 中的原型链中不可能有 test 方法。 扩展阅读 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain |