为了账号安全,请及时绑定邮箱和手机立即绑定

关于实例,原型和对象

开始以为自己明白了关于实例和原型的问题,今天听老师说了感觉还差的好远;

两个对象,A和B

1:A=new B

2:A.prototype=new B

3:A.prototype=B.prototype

1:第一个老师在视频中A是一个变量obj,是不是表示obj是B的实例,obj作为B的实例和B都有一个指针指向了B的原型?

如果这里的obj是一个对象A是不是意味着这个对象A有一个指针指向了B的原型,同时作为对象,他还有一个默认的指针指向了他本身的原型object.prototype?一个对象可以有两个原型链的继承嘛;求指点

2:A作为一个对象。第一种想法是他有一个自带的prototype,如果这是我给他的prototype指向了new B;是不是说给他的默认的原                                型指向了B的原型;

                                第二种想法是他的自带的原型指向了A,然后通过A再向上到A的原型;

3:A.prototype=B.prototype:此时也是A和B的指针同时指向了B的原型,似乎和第2个的第一种想法类似;

3和2中的第一个似乎有相同之处;他们之间的差别是不是2中的A有自己的原型.然后通过他的原型到B的原型;而三中的A直接将B的原型作为自己的原型了,也就是说此时我如果改变A的原型也就意味着将B的原型改变了,毕竟他们本是就是一个东西嘛。

我知道自己想的说的一塌糊涂了,不过还是希望能将自己的想法说出来,希望能有大神分析一下给指出哪里不对,以及上面几种继承的不同之处,拜谢


正在回答

2 回答

我不是大神,在这里说一下自己的想法,自己理解的这个,我也不知道是不是正确,你可以看看:

对于1.A=new B,就像ppt中的obj= new foo()一样,a是一个变量obj,表示obj是B的实例,obj的[[proto]]是指向B的说明obj的原型就是B,也就是a的object.prototype就是B,而B再往上指向B自己的原型,此处没有矛盾,而obj变量也就是a对象只有一个原型链。。。下面2和3也可以按照这种思路理解

1 回复 有任何疑惑可以回复我~
#1

qq_洛书河图_0 提问者

谢谢,回去看了下书,差不多大概能理解点了
2016-04-08 回复 有任何疑惑可以回复我~

楼主说的我也没完全看明白,不过基于那三个表达式,我是这样理解的

1:这时候A其实是用构造器方法New B()实例化的一个对象,当然A的原型其实就是B.prototype,因为严格来说A就是B的一种存在方式,但是此时A不能再作为构造器实例化其他函数,正因为它是B的实例化,即不不能使用var c=new A();这也是它跟下面第二个表达式的本质区别

2:A.prototype=new B(); new B()其实就是创建了一个空对象,并且继承了B的原型,但是不会影响B自己的引用,即修改A是不会污染B的,可以说实现了继承,此时可以用A构造器方法实例化新的对象。例如视频例子用boson=new student(...);这是一种可行的继承。

3.这种就是将A.prototype直接指向了B.prototype,即他们的原型就同一引用,而不是像第二个方法,创建了一个B的空对象给A提供引用。这样会导致修改A,B也会跟着变化,就是我说的互相污染,显然不是继承应该有的现象。

我也是刚看JS没多久,可能说的有好多不对的地方,希望能起一点作用。

4 回复 有任何疑惑可以回复我~
#1

qq_洛书河图_0 提问者

只能采纳一个人的,不过还是得谢谢你了,写了这么多,,
2016-04-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript深入浅出
  • 参与学习       281100    人
  • 解答问题       1020    个

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

进入课程

关于实例,原型和对象

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信