发新贴  快速回复

为什么用这个只能继承方法而不能继承Aaa的属性啊?

  妙味用户797071
2018-10-30 10:38

本帖内容针对以下视频发布:

10-继承的其他形式之类式继承
 
2017年2月8日

Aaa的属性是加在this上,如果是加在原型上就可以了。

this是一个对象,原型prototype也是一个对象,他们都可以加方法和属性。

加this上不共享,加原型prototype上可以共享。

2018-10-30 13:43  回复本帖
 
妙味用户239012

这老师有个习惯,属性写构造函数里,方法写原型上,就说属性怎么继承方法怎么继承,明明就是prototype里的属性和方法,以及构造函数里new了后才会有的属性和方法,反正很无语他这么讲,也可能是我理解错了吧

2018-11-24 16:30  回复本帖
 
维生素

2017年2月8日 2018-10-30 13:43发表的内容:

Aaa的属性是加在this上,如果是加在原型上就可以了。

this是一个对象,原型prototype也是一个对象,他们都可以加方法和属性。

加this上不共享,加原型prototype上可以共享。

加this上不共享,加原型prototype上可以共享。
//我理解这句话的意思是 任何地方加this都不共享 我觉得不对 再结合本题我觉得也不对 本问题Bbb.prototype = new F();改变了Bbb的原型指向(Bbb.prototype --->F的私有(空的)---->F.prototype---->Aaa.prototype---->Function.prototype---->Object.prototype),Aaa的私有属性没有在Bbb的原型链上,所以得不到Aaa的私有属性.
2018-12-14 11:12  回复本帖
 
维生素

妙味用户239012 2018-11-24 16:30发表的内容:

这老师有个习惯,属性写构造函数里,方法写原型上,就说属性怎么继承方法怎么继承,明明就是prototype里的属性和方法,以及构造函数里new了后才会有的属性和方法,反正很无语他这么讲,也可能是我理解错了吧

写在构造函数上是私有的,写在原型上的都是公有的,只要再原型链上就能查找到公有的 ,写在哪里主要看需求
2018-12-14 11:14  回复本帖
 
2017年2月8日

维生素 2018-12-14 11:12发表的内容:

加this上不共享,加原型prototype上可以共享。
//我理解这句话的意思是 任何地方加this都不共享 我觉得不对 再结合本题我觉得也不对 本问题Bbb.prototype = new F();改变了Bbb的原型指向(Bbb.prototype --->F的私有(空的)---->F.prototype---->Aaa.prototype---->Function.prototype---->Object.prototype),Aaa的私有属性没有在Bbb的原型链上,所以得不到Aaa的私有属性.
你最后得出的结论是"Aaa的私有属性没有在Bbb的原型链上,所以得不到Aaa的私有属性"。
跟我这个“加this上不共享,加原型prototype上可以共享”好像有点关系。
你是不是觉得我这句话(加this上不共享,加原型prototype上可以共享),不对啊?
你有什么可以证明我这句话不对吗?
看了你上面的回答,好像不能啊。
2018-12-14 13:28  回复本帖
 
妙味用户239012

维生素 2018-12-14 11:14发表的内容:

写在构造函数上是私有的,写在原型上的都是公有的,只要再原型链上就能查找到公有的 ,写在哪里主要看需求
我知道,只是说这里老师在讲课时就直接说的方法怎么怎么,属性怎么怎么,想了一会才知道他的意思是原型上的和构造函数里的。
2018-12-14 21:38  回复本帖
 
维生素

2017年2月8日 2018-12-14 13:28发表的内容:

你最后得出的结论是"Aaa的私有属性没有在Bbb的原型链上,所以得不到Aaa的私有属性"。
跟我这个“加this上不共享,加原型prototype上可以共享”好像有点关系。
你是不是觉得我这句话(加this上不共享,加原型prototype上可以共享),不对啊?
你有什么可以证明我这句话不对吗?
看了你上面的回答,好像不能啊。
function Aaa(){ //父类
this.name2 = [1,2,3];
}
Aaa.prototype.showName = function(){
alert( this.name );
};
function Bbb(){ //子类
}
var F = function(){
this.name=[6]
};
F.prototype = new Aaa;
Bbb.prototype = new F();//Bbb.prototype会得到实例new F的私有属性this.name=[6]和原型链上的属性方法
Bbb.prototype.constructor = Bbb;
var b1 = new Bbb();
console.log(b1.name);//[6]
var b2 = new Bbb();
console.log(b2.name2);//[1, 2, 3]
//Bbb的原型指向实例F,b1先查找自己的类没有找到再通过原型链找到实例F的构造函数,此时里面有name终止查找
//b2类上没有name2通过原型查找构造函数F私有属性,没有找到会通过proto继续向上查找,找到Aaa构造函数 里面有this.name2 = [1,2,3];
2018-12-14 23:07  回复本帖
登录 后才可以发表回复